[欧拉函数]Bzoj2705 Longge的问题[SDOI2012]
2015-07-01 21:43
190 查看
因为要求gcd之和,所以枚举约数k然后找有多少个gcd是k的,因为gcd(i,n)=k,所gcd(i/k,n/k)=1,所以只要与n/k互质的都行,就用欧拉函数找出与n/k互质的个数,因为i是n的约数,所以n/i也是i的约数,就只要枚举到sqrt(n)就行啦
[code]#include<cstdio> #include<cmath> long long n,ans; int m; long long phi(long long x) { long long t=x,l=sqrt(x); for(long long i=2;i<=l;i++) if(x%i==0) { t=t/i*(i-1); while(x%i==0) x/=i; } if(x>1) t=t/x*(x-1); return t; } int main() { scanf("%lld",&n); m=sqrt(n); for(int i=1;i<=m;i++) if(n%i==0) { ans+=(long long)i*phi(n/i); if(i*i<n) ans+=(long long)(n/i)*phi(i); } printf("%lld",ans); return 0; }
相关文章推荐
- 07 Java JUC 中的 Executor 框架 周期性任务调度
- 注册DLL的方法!
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
- ORA-06553: PLS-801: 内部错误 [56319]
- UML简单介绍(二十四)——基于UML的软件设计总结
- 05 Java JUC 中的 Executor 框架 提交线程
- Android 第一行代码
- ASP.NET版本的Kindeditor插件的使用
- Git详解之七 自定义Git
- 引用
- 自定义“ORA-20010: 不能DROP/TRUNCATE该表”的错误
- Hadoop学习(9)----MapReduce阶段的Split阶段
- 排序算法之希尔排序Java版
- Bzoj1485 有趣的数列[HNOI2009]
- Head First 设计模式(2):观察者模式
- 进程间通信
- MATLAB实现pettitt检验
- [容斥原理]Bzoj1042 硬币购物[HAOI2008]
- 03 Java 并发 线程安全理论基础
- QT5.4 计算器程序 打包&发布,解决dll的最新解决方案