首页 > 其他分享 >基于值域的快速GCD

基于值域的快速GCD

时间:2023-09-06 18:34:59浏览次数:37  
标签:tmp b% 基于 GCD int 值域 fac d1 gcd

这其实是一道洛谷模板题,题目是5435

对预处理的讲解可以看看这个博客(代码看自己的,见下)

void getprime()
{
	for(int i=0;i<=2;i++) fac[1][i]=1;
	for(int i=2;i<=N-10;i++)
	{
		if(!v[i])
		{
			v[i]=i;
			prime[++tot]=i;
			fac[i][0]=fac[i][1]=1;
			fac[i][2]=i;
		}
		for(int j=1;j<=tot;j++)
		{
			if(prime[j]>v[i]||(ll)i*prime[j]>N-10) break;
			int tmp=i*prime[j];
			v[tmp]=prime[j];
			fac[tmp][0]=fac[i][0]*prime[j];
            fac[tmp][1]=fac[i][1];
            fac[tmp][2]=fac[i][2];
            if(fac[tmp][0]>fac[tmp][1]) {
            fac[tmp][0]^=fac[tmp][1]^=fac[tmp][0]^=fac[tmp][1];
            }
            if(fac[tmp][1]>fac[tmp][2]) {
            fac[tmp][1]^=fac[tmp][2]^=fac[tmp][1]^=fac[tmp][2];//这个操作就是升序排序
            }
		}
	}
}
void init()
{
	for(int i=0;i<=M-10;i++)
	pre[i][0]=pre[0][i]=i;
	for(int i=1;i<=M-10;i++)
	for(int j=1;j<=i;j++)
	pre[i][j]=pre[j][i]=pre[j][i%j];
}

那么这篇博客对查询的讲解不太细致,其实就是用到一个定理

\(gcd(a \times b \times c,y)=gcd(a,y) \times gcd(b,\frac{y}{d_{1}}) \times gcd(c,\frac{y}{d_{1} d_{2}})\),其中\(d_{1}=gcd(a,y)\),\(d_{2}=gcd(b,\frac{y}{d_{1}})\)

这个定理的证明暂时不详,有机会可以了解

但是查询时一定要注意,某一次的x可能是质数,此时想的分解为1,1,x,那么这个时候就别用预处理的数组了,可能会超出范围,这个时候特判即可,代码见下

int gcd(int a,int b)
{
	int d1,d2,d3;
	d1=pre[fac[a][0]][b%fac[a][0]];
	b/=d1;
	d2=pre[fac[a][1]][b%fac[a][1]];
	b/=d2;
	if(v[fac[a][2]]==fac[a][2])
	{
		if(b%fac[a][2]==0) d3=fac[a][2];
		else d3=1;
	}
	else d3=pre[fac[a][2]][b%fac[a][2]];
	return (ll)((ll)d1*d2)%p*d3%p;
}

标签:tmp,b%,基于,GCD,int,值域,fac,d1,gcd
From: https://www.cnblogs.com/dingxingdi/p/17683096.html

相关文章

  • 基于高性能Cortex®-M33内核STM32H562RIV6、STM32H562RIT6、STM32H562RGV6 32-bit ARM
    简介STM32H562xx器件是基于高性能ARM®Cortex®-M3332位RISC内核的高性能微控制器系列(STM32H5系列)。它们的工作频率高达250MHz。Cortex®-M33内核具有单精度浮点单元(FPU)、支持所有ARM®单精度数据处理指令和所有数据类型。该系列微控制器具有1至2MB的Flash存储器、640KB的SRA......
  • 用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级
    导读蜀海供应链是集销售、研发、采购、生产、品保、仓储、运输、信息、金融为一体的餐饮供应链服务企业。2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中台和各业务产品项目的任务调度系统工具。本文主要分享了蜀海供应链在海豚早期旧版本实......
  • 国内某头部理财服务提供商基于白鲸调度系统建立统一调度和监控运维
    导读:国内某头部理财服务提供商成立于2019年,是股份制银行中首批获准筹建、首家获准开业、首家成立的银行理财子公司。自2004年推出国内首支人民币理财产品以来,通过投资模式的不断创新和投资管理能力的持续提升,引领国内银行业理财市场。该企业每天处理的任务量达1W,内部系统众......
  • 【原创】基于QT编写的支持IPv4/IPv6双协议栈,TCP/UDP双模式,DLL内存加载的模块化远控木
    本人已经本科毕业一年有余,在平常实习过程中,发现大佬都对我的本科毕设--双协议栈远控木马感兴趣。据我所知,目前流行的C2远控软件中,MSF支持IPv4和IPv6,但是MSF生成的单个木马只是支持其中的一种协议,而不是双协议栈。CobaltStrike目前尚无IPv6的使用案例。其他支持双协议栈的C2软件......
  • 一次尝试:一种基于Common Lisp的简易单词本命令行工具
    绪论背景英语的学习给现代中国学生带来了极大的挑战。学习英语的一种常规做法是记录纸质笔记。然而,常规的纸质笔记具有书写慢、不易修改的特点……(编不下去了)。为了简化英语单词笔记记录、查看的操作,本文基于一种简单的数据管理方法,提出一种新型单词本,即lisp-dictionary命令行工......
  • 循环神经网络--基于pytorch框架
    importmatplotlib.pyplotaspltimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasffromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)print(f.......
  • 在基于 HTML 的网页中嵌入 Flutter 元素?
    在基于HTML的网页中嵌入Flutter元素,可以通过使用Flutter的Web插件来实现。以下是基本的步骤:配置Flutter环境:确保已经安装并配置了Flutter开发环境,包括DartSDK和FlutterSDK。创建FlutterWeb项目:在命令行中使用fluttercreate命令创建FlutterWeb项目。进入......
  • 基于全息感知的智慧高速IT设施监控运维方案
    作为智能交通的重要细分领域,建设智慧高速是实施交通强国战略的重要基础。在信息化时代,交通行业已经依托信息化建设取得了显著的成果,其中以收费网络、办公网络、监控网络和通讯网络为基础的网络架构已经形成,并且正在逐步完善网络架构的安全运维和优化建设。智慧高速公路作为交通行......
  • 深度神经网络中基于卷积操作的自适应学习算法研究
    本文提出了一种基于卷积操作的自适应学习算法,用于深度神经网络中。该算法通过引入复杂的数学公式和高阶张量操作,实现了对复杂模式的准确建模和学习。我们通过对网络架构的改进和参数的优化,提高了模型的泛化能力和性能表现。实验结果表明,我们的算法在多个基准数据集上取得了优于现有......
  • 基于边缘物联网关的智慧零售应用方案
    推动经济健康发展增长,就要持续促进和扩大消费需求,提升消费体验。随着物联网技术的普及,面向日常消费的智慧零售应用迎来爆发式增长,不仅可以提升消费者消费体验,还可以提高商家营销和管理效率。本篇就为大家简单介绍一下基于边缘物联网关的智慧零售应用方案。  智慧零售应用方......