C. 最大公约数 (线性筛求积性函数)

C. 最大公约数

i=1nngcd(i,n)

先考虑用欧拉函数解决。考虑枚举 d=gcd(i,n) 的取值。式子变成 dni=1n[gcd(i,n)=d]nd

对于 gcd(a,b)=d,有 gcd(ad,bd)=1

所以 dni=1nd[gcd(i,nd)=1]nd

而明显,在 nd 中与它互质的数即为 φ(nd)

dnndφ(nd)

=dndφ(d)

f(n)=dndφ(d),可以证明,f(n) 是积性函数。

证明:

gcd(a,b)=1

ab 的因子一部分来自 a,一部分来自 b

f(ab)=dabdφ(d)=dadbddφ(dd)

φ(dd)=φ(d)φ(d)

f(ab)=dndφ(d)dndφ(d)=f(a)f(b)

证毕。

直接线性筛计算积性函数即可。

关于如何计算,设 x=i×prij

  1. i 是质数时,f(i)=i×(i1)+1

  2. priji 时,分两种情况i 不是最小质因数的幂次,f(x)=f(lowx)f(x/lowx)lowxx 的最小质因数的最大幂次;i 是小质因数的幂次,一般有规律可以计算,因为因数易知,比如这里就可以写成 f(x)=f(i)+prijφ(prij)

  3. priji 时,f(x)=f(i)f(prij)

总结:此类题的思路就是先化简式子,先看看能不能有欧拉函数做,再考虑莫反。最后证明此函数是积性函数,直接线性筛预处理做到 O(n) 多次询问。

posted @   Fire_Raku  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示