博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数论】【枚举约数】【欧拉函数】bzoj2705 [SDOI2012]Longge的问题
阅读量:6261 次
发布时间:2019-06-22

本文共 799 字,大约阅读时间需要 2 分钟。

∵∑gcd(i, N)(1<=i <=N)

=k1*s(f1)+k2*s(k2)+...+km*s(km) {ki是N的约数,s(ki)是满足gcd(x,N)=ki(1<=x<=N)的x的个数}

∴gcd(x,N)=ki (1<=x<=N)  <=>  gcd(x/ki,N/ki)=1 (1<=x/ki<=N/ki)

gcd(x/ki,N/ki)=1 (1<=x/ki<=N/ki) 的x的个数 即为φ(N/ki)

∴ans=∑φ(N/ki)*ki

∴O(sqrt(N))枚举约数即可。

1 #include
2 #include
3 using namespace std; 4 typedef long long ll; 5 ll n,ans; 6 int phi(ll x) 7 { 8 ll res=x; 9 for(ll i=2;i*i<=x;i++)10 if(x%i==0)11 {12 res=res/i*(i-1);13 while(x%i==0) x/=i;14 }15 if(x>1) res=res/x*(x-1);16 return res;17 }18 int main()19 {20 scanf("%lld",&n);21 for(ll i=1;i*i<=n;i++) if(n%i==0) ans+=(phi(n/i)*i+phi(i)*(n/i));22 printf("%lld\n",ans);23 return 0;24 }

 

转载于:https://www.cnblogs.com/autsky-jadek/p/4067185.html

你可能感兴趣的文章
oop
查看>>
(八)改为Spring Boot+enjoy模板的说明
查看>>
MBR与GPT分区格式(实例-创建大于2TB的分区) - dongnan - 51CTO技术博客
查看>>
SQL Server 2005数据库引擎下无实例
查看>>
查看LINUX发行版的名称及其版本号的命令
查看>>
nginx的平滑升级
查看>>
我的友情链接
查看>>
十九,System类
查看>>
如何证明概率论的乘法公式 -贝叶斯公式
查看>>
python核心编程-第五章-习题
查看>>
// 序列和反序列化JSON
查看>>
Session劫持与Session-ID的安全长度
查看>>
Securtcrt无法远程连接Linxu服务器
查看>>
oracle 11g如何完全卸载
查看>>
lync与ex集成之UM
查看>>
java.util.ConcurrentModificationException when interation the list then remove
查看>>
质量保证
查看>>
详解C#的break,continue,return
查看>>
Python列表的内置方法
查看>>
深圳市高级工商管理研究会成立大会成功召开
查看>>