一类数论容斥题枚举贡献因子的套路

【LeetCode】分享|如何科学的刷题? 摘要:本文系统介绍了三种科学刷题方法:1)专题训练,按算法类型系统刷题,推荐先完成1700分以下题目;2)随机训练,关闭题目标签模拟实战,检验综合能力;3)突击训练,针对面试快速刷HOT 100经典题。建议结合心流理论,合理分配时间,初期可看题解学习思路,后期注重独立思考。附完整题单链接(含滑动窗口、动态规划等12大专题)及时间复杂度参考表,强调坚持积累与阶段性复盘的重要性。 阅读详情

        这里主要提供这类题莫比乌斯的推导套路,推完柿子再维护东西思路会清晰许多

A hdu4135 
题意:

        给A B N 问【A,B】中与N互质的个数,N<=1e9,B<=1e15

公式推导:

        先将题意化成柿子:

        

        由 ,*指狄利克雷卷积,其实就是莫比乌斯反演啦

        

        令,*是乘法,换元,并改变求和顺序

        

维护思路:

        由于mu的特性,只有d是不同质因子的乘积对答案才有贡献

        比如 2 2*5 2*7*11有贡献,2*2,12无贡献

        贡献因子的定义:定义这种不同质因子乘积叫贡献因子

        贡献因子的求法:预处理N的质因子,然后容斥N的质因子

        求出ans:遍历N的所有贡献因子d

 g++ ACcode 这里mu其实不用预处理

#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool isp[48005];int pri[48005];int mu[48005];
int p=0;
void init(int n)
{
	for(int i=1;i<=n;i++)isp[i]=1;mu[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(isp[i]==1) pri[++p]=i,mu[i]=-1;
		for(int j=1;j<=p&&pri[j]*i<=n;j++)
		{
			isp[pri[j]*i]=0;
			if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
			else mu[i*pri[j]]=-mu[i];
		}
	}
}
vector<int>fac;
void gfac(int n)
{
	for(int i=1;pri[i]<=n/pri[i];i++)
	{
		if(n%pri[i]==0)fac.push_back(pri[i]);
		while(n%pri[i]==0)n/=pri[i];
	}
	if(n>1)fac.push_back(n);
}
ll gans(ll B)
{
	int up=fac.size();
	ll ans=B;
	for(int i=1;i<(1<<up);i++)
	{
		int cnt=0;int mul=1;
		for(int j=0;j<up;j++)
		{
			if(((1<<j)&i)!=0)	cnt++,mul*=fac[j];
		}
		if(cnt&1)ans-=(B/mul);
		else ans+=(B/mul);
	}
	return ans;
}
int main()
{
	init(45000);//cout<<45000*45000;
	int T;scanf("%d",&T);int kase=0;
	while(T--)
	{
		fac.clear();
		ll A,B;int n;scanf("%lld %lld %d",&A,&B,&n);
		gfac(n);
		printf("Case #%d: ",++kase);
		printf("%lld\n",gans(B)-gans(A-1));
	}
} 

 

 

好了,我们刚热完身,现在来一题难一点的

 

B.hdu5072   莫比乌斯反演+同色三角形套路
题意:

        求n个不同的数(ai<=1e5,n<=1e5)中有多少组三元组(a, b, c)两两不互质或者两两互质

思路:

        首先将题意转换一下,我们考虑平面上有N个点,两两不共线

        一个三元组代表一个三角形ABC

        由题意,AB,AC,BC 必然有(A,B)=(A,C)=(B,C)=1或!=1

        那么相当于问有多少个同色三角形,AB互质将AB染成红色,不互质染成黑色

        同色三角形的求法:C(n,3) - sum 从1到n:(该点与其他x个点互质*该点与其他y个点不互质) 

        现在问题的核心在:对于ai,有多少个aj与ai互质?

        转换成柿子:

柿子推导:

        

        

        

维护方法:         

        

       统计有多少个ai含有贡献因子d即可

        A线性筛预处理1e5以内的mu,

        B利用这个mu用通用筛维护出1e5以内每个数的贡献因子

        C对每个ai暴力遍历贡献因子,维护出num

        D计算答案

    g++ 312ms

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
bool isp[maxn];int pri[maxn];int mu[maxn];
int num[maxn];int p=0;
vector<int>E[maxn];int a[maxn];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;	
} 
void init()
{
	int up=100001;//A线性筛
	for(int i=1;i<=up;i++)isp[i]=1;mu[1]=1;
	for(int i=2;i<=up;i++)
	{
		if(isp[i]==1)mu[i]=-1,pri[++p]=i;
		for(int j=1;j<=p&&pri[j]*i<=up;j++)
		{
			isp[pri[j]*i]=0;
			if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
			else mu[i*pri[j]]=-mu[i];
		}
	}
	for(int i=1;i<=up;i++)//B预处理每个数的mu贡献因子 
	{
		if(mu[i])
			for(int j=i;j<=up;j+=i)
				E[j].push_back(i);
	}
}
int main()
{
	init();int T;scanf("%d",&T);
	while(T--)
	{
		ll n;scanf("%lld",&n);memset(num,0,sizeof(num));
		for(int i=1;i<=n;i++)
		{
			a[i]=read();//scanf("%d",&a[i]);	
			for(int j=0;j<E[a[i]].size();j++) num[E[a[i]][j]]++;//C
		}ll ans=0;
		for(int i=1;i<=n;i++)//D
		{
			int tem=0;if(a[i]==1)continue;
			for(int j=0;j<E[a[i]].size();j++) tem+=mu[E[a[i]][j]]*num[E[a[i]][j]];
			ans+=tem*(n-1-tem);
		}
		printf("%lld\n",n*(n-1)*(n-2)/6-ans/2);//同色三角形套路 
	} 
}

C 17ICPC乌鲁木齐现场赛 K题 :    

https://blog.youkuaiyun.com/animalcoder/article/details/79438720

      

算法竞赛数论核心:质数、GCD、快速幂与模运算实战指南 数论是计算机科学中研究整数性质的基础数学分支,其核心概念如质数、最大公约数(GCD)和同余运算是算法设计的基石。理解质数筛法、欧几里得算法和模运算原理,对于编写高效、稳定的程序至关重要。这些技术能有效解决大数运算中的溢出问题,并优化计算复杂度,其价值在算法竞赛、密码学及分布式系统等领域尤为突出。具体到应用场景,例如在处理蓝桥杯等竞赛中的**质数判定**与**组合数取模**问题时,快速幂与乘法逆元成为关键工具。本文聚焦于将这些基础数论知识转化为可复用的代码模板,帮助学习者识别题目模型并规避常见陷阱,从而在工程 阅读详情

相关推荐

STM32 IAP跳转后APP卡死?别慌,手把手教你修复HAL_RCC_OscConfig时钟配置冲突

本文深入分析了STM32 IAP跳转后APP在HAL_RCC_OscConfig函数中卡死的问题,揭示了PLL时钟配置冲突的根本原因。通过详细的代码示例和分步解决方案,指导开发者正确处理STM32F1/F4系列的时钟系统二次初始化问题,确保IAP+APP架构的稳定运行。

weixin_28685287的博客 365

枚举,计算贡献

枚举,贡献计算

m0_59519985的博客 424

Unreal浅做一个MetaBall

Raymaching其实就是实时场景的一种渲染方法。主要原理网上有很多详细介绍。简单来说就是,以摄像机为原点,发射很多条射线,而每一条射线以步长为单位向前采样,同时以采样点和最近的物体像素的距离为半径进行一个球形检测。检测到摄像机和场景像素在当前射线方向的距离差小于某个值,就表示射线到达物体表面,然后画这个像素。

xzljj的博客 334

CodeForces - 1422C - Bargain 枚举贡献

CodeForces - 1422C - Bargain 枚举贡献 题意:给出长度为n的字符串,删除其中任意长度的连续子串,将所有可能的情况的数字加起来取模 做法:假设序列是12354,假设2不被删去 那么可能的情况有以下两种: 删除位置[3,5]中的连续子串 这种情况下,2的贡献是不同的,分别是: 删除长度为3的子串2×100×12×10^0×12×100×1 删除长度为2的子串:2×101×22×10^1×22×101×2 删除长度为1的子串:2×102×32×10^2×32×102×3 ans1=∑

想要一只银渐层 1586

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 398

OpenClaw实操:给网站装上“智能眼睛”?手把手教你用OpenClaw实时监控网站

本文介绍如何在Windows系统使用OpenClaw构建智能网站监控助手。手把手教你通过配置本地AI模型,让openclaw构建的ai助手自动检测指定网页的内容变化,理解更新重要性,并及时通过邮件、微信、Telegram等渠道发出预警,让你第一时间掌握关键信息,彻底告别手动刷新。

plawuyue的博客 2162

C. Bargain(数学规律+贡献法枚举优化)详解

https://codeforces.com/contest/1422/problem/C 大晚上算错数据范围的我,以为只有50位,直接暴力T5.然后发现是10000位。 贡献法优化,从低位往高位去枚举,也就是从后往前枚举。比如说枚举到第i位。 考虑第i位前进行连续区间的取。设可以取的整个区间范围为k. 可以发现,取1长的有k种,取2长的有k-2,取3长的有k-3...可以得出有k*(k+1)/2; 代入长度(i-1)可以得如果在第i位前面去取的话,这个数位的贡献是i*(i-1)*s[i]*pow

代码笔记本 2899

MTK-AWB 小结 (二)

调试总结:可以将offset 对应的ratio加大,保留更多的喜好色(偏色),影响WF statistic gain,从而影响最终的awb gain。这一部分前期CCT校准的时候就会算出一组默认值,当然这个offset offse 值用于优化T,S,wf 光下的偏色喜好度. offset。后面遇到 A H Shad 光收白或者偏色,还可以优化 A 的offset ,H offset,shad offset.new offset 计算过程(Day locus offset 和M/G offset )

qq_46056347的博客 1167

数论--积性函数--因子和函数&因子个数函数

因子和函数f(n) = n的所有正因子之和 因子个数函数g(n) = n的所有正因子个数 1.定理:如果f是积性函数,f的和函数(F(n) = sum(f(d) ,d为n的因子) )也是积性函数 2.因子和函数、因子个数函数都是积性函数 3.n = p1^a1 * p2^a2 * ... * ps^as 因子和函数f(n) = p1^(a1+1) -1 /(p1 - 1) * p2^(a...

unintended 2889

UDF学习(二)基础数据类型与常见宏

thread_loop_c (t,d) 必须与begin_c_loop (c,t)同时使用,但begin_c_loop (c,t)不一定与thread_loop_c (t,d)同时使用。同理thread_loop_f(t,d)必须与begin_f_loop (c,t)同时使用,但begin_f_loop (c,t)不一定与thread_loop_f(t,d)同时使用。begin_c_loop (c,t) 在计算域内对网格单元进行循环。c_face_loop (c,t)遍历网格单元上的所有网格面。

weixin_44386973的博客 855

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 47

【模板】数论之因子数问题

目前有如下问题: N的正因数个数 N的全体正因数之和 求1到n的因子和的和 求1到n的因子个数的和 具体参考https://blog.youkuaiyun.com/Hpuer_Random/article/details/81229214...

swineherd的博客 326

MediaPipe 从入门到精通:安装、配置与多场景应用实战手册

人体姿态检测是 MediaPipe 的核心功能之一,它能够从图像或视频中识别人体姿态,并输出关键点的坐标。这些关键点覆盖了身体的主要部位,例如肩膀、肘部、髋部、膝盖等,总计 33 个点。每个关键点包含 x、y、z 坐标(归一化到 0-1 范围)以及可见性评分,可用于分析动作、姿势或开发健身、游戏等应用。手部关键点检测是 MediaPipe 的另一大亮点,它可以识别图像或视频中的手部,并输出 21 个关键点的坐标。这些关键点覆盖手掌和手指的各个部位,适用于手势识别、虚拟现实或交互式应用。

m0_71589036的博客 389

32.hdu6363 因子容斥+模型+数论

32.hdu6363 因子容斥+组合模型+数论 题意:有N本一摸一样的书,有一个共有K层的书架,现在要把书都放到书架上。 放完后假设第 i层书架有 Bi本书,则该层书架的稳固值为 (2^Bi)-1 定义整个书架的美观值为所有层书架的稳固值的GCD 问现在随机放这些书,整个书架的美观值的期望值是多少。 思路:直接搬得官方题解,很清晰了 所以我们只用考虑GCD(x1,x2,x3….)的...

animalcoder 245

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数论的一些小小的性质总结

gcd与lcm的性质

weixin_62528401的博客 302

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数论总结(下)(高级数论)

一.\(BSGS\)算法(大步小步算法) 求解:\[a^x\equiv b\pmod{c}\] 其中\(c\)为质数 我们把\(x\)拆为\(x = im - j\)。 那么:\(a^x\equiv b\pmod{c}\) ------->\(a^{im-j}\equiv b\pmod{c}\) \(a^{im-j}\equiv b\pmod{c}\) --------> \...

df4516的博客 420

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数论函数

线性筛:   (1) i%prime[i]==0 : i*prime[j]  被  prime[j]  第一次筛到 。 (2)i%prime[j]!=0 :i*prime[j]  被  prime[j]  第一次筛到 。 (3)prime[j]  筛到的  i*prime[j]  都是  i*prime[j]  的最小质因子,且只被筛一次。   积性函数线性筛: (1) 考虑 i=1...

qq_40806542的博客 224

【数论】(莫比乌斯反演)关于莫比乌斯反演的小结

课件来源:莫比乌斯反演课件本博客是我本人对课件的一些理解,如果看不懂课件或许可以参考本博客。 注:我学完后并不觉得和bilibili2017拜年祭里面神奇的莫比乌斯环有什么关系。。 首先,要了解一个叫莫比乌斯函数的东西。 设一个函数参考下面的例子如果我们要求f的值,就可以进行如下操作为了方便运算,我们希望得到一个f(i)的表达式,于是就引入了莫比乌斯函数μ (别和cch学读作“u”) 换言

氧化钠的博客 747

数学水题

自己的数学基础简直烂到爆。。 从这里面随机做 113C. Double Happiness 问区间\([l, r]\)内有多少个素数可以表示为\(a^2 + b^2\)的形式 任何一个满足条件的数都可以表示为\(4k + 1\)的形式 证明 bitset压一下位 此题完结 代码 121C. Lucky Permutation 长度为\(n\)的排列中第\(k\)大的排列,有多少个位置满足下标...

weixin_30770495的博客 137

UVA11424 GCD - Extreme (I)

qwq

bcr_233的博客 185

2016 CCPC Hangzhou Onsite(部分题)

D题 - Difference 题意:给你两个数$x$, $K$个数和一个公式$$f(y, K) = \sum_{z\text{ in every digits of }y} z^K (f(233, 2) = 2^2 + 3^2 + 3^2 = 22)$$ 要求你找出所有满足$$x = f(y, K) - y$$这个式子的y的数量。 解决:折半枚举法,这个套路其实被用过很多遍,但以...

arxd45524的博客 337

从行列式到杜教筛:组合计数问题的数论算法求解

在算法竞赛与高级数学建模中,组合计数是一类核心问题,常涉及方案总数等计算。其通用解决思路是将实际问题抽象为图论模型,进而利用矩阵树定理等工具,将计数问题转化为特定矩阵的行列式计算。当矩阵具有特殊结构(如循环矩阵)时,行列式可进一步化简为某个数论函数的前缀和表达式。面对超大范围(如n高达10^9)的前缀和求解,传统线性筛法失效,此时需要引入杜教筛这一高效算法。杜教筛通过巧选辅助函数、递归与整除分块,将时间复杂度优化至O(n^{2/3}),成为处理积性函数大规模求和的关键技术。本文以“摆”类问题为例,详解如何将

weixin_30266885的博客 464

破译密码

莫比乌斯反演入门题目,但是先从容斥的角度理解这道题目 由于这道题目\(a,b\)的值可以不同,所以不用数论容斥,换一个角度,考虑把\(k\)除进去然后互质 所以主要就是解释一下\(F[a,b]\)是怎么推导的 我们从容斥原理的角度考虑。对于任意一个二元组\((x,y)\),如果\(gcd(x,y)≠1\),那么\(gcd(x,y)\)一定是某一个质数的倍数 设\(P_i\)表示最大公约数的质数\...

dingxingdi的博客 400

莫比乌斯反演与Min_25筛:解决超大范围数论函数求和的终极指南

在算法竞赛和高性能计算中,处理数论函数的前缀和是一个经典问题。其核心原理在于利用积性函数的性质,通过狄利克雷卷积或莫比乌斯反演,将复杂的求和式转化为更易处理的形式。这项技术的核心价值在于,它能将看似O(n)的暴力计算,优化至O(sqrt(n))甚至亚线性复杂度,从而应对高达1e10乃至更大的数据规模。在实际应用场景中,如密码学、组合数学和分布式计算,快速计算欧拉函数、除数函数等的前缀和至关重要。本文聚焦于解决此类问题的两大关键技术:莫比乌斯反演用于理论化简,以及被誉为数论筛法“天花板”的Min_25筛用于高

weixin_33978044的博客 467

从莫比乌斯反演到Min_25筛:算法竞赛中的数论求和与性能优化实战

在算法设计与高性能计算领域,处理大规模数据的求和问题是一个核心挑战。其基本原理常涉及将复杂计算转化为可高效处理的形式,例如通过数论变换降低问题复杂度。关键的技术价值在于,掌握这类方法不仅能解决特定竞赛难题,更能培养对计算复杂度的深刻理解和优化思维,这是处理海量数据、数据库查询优化、分布式计算等工程场景的宝贵基础。具体到数论求和,莫比乌斯反演和Min_25筛是两项关键技术。莫比乌斯反演通过巧妙的容斥原理,将涉及最大公约数的条件求和转化为整除求和,常与数论分块结合,将复杂度从O(n)降至O(√n)。而Min_2

weixin_30430169的博客 319
上一篇: hdu5869 离线BIT+ST+RMQ
下一篇: Unity3d每日API积累
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值