POJ
来源:互联网 发布:手机mp3录音软件 编辑:程序博客网 时间:2024/06/05 06:59
题目:给出N,求 ∑gcd(i, N) 1<=i <=N.
0<N<2^31
思路:
phi(p^k)=(p-1)*p^(k-1)
考虑如果N=P^k的时候,那么F[N]=k*p^(k-1)*(p-1)+p^k。
利用eular的积性性质
F[N]=F[p1^k1*p2^k2……pi^ki]=∑(ki*pi^(ki-1)+p^ki).
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<ctime>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<list>#include<numeric>using namespace std;#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3f3f3f3f3f#define mm(a,b) memset(a,b,sizeof(a))#define PP puts("*********************");template<class T> T f_abs(T a){ return a > 0 ? a : -a; }template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}// 0x3f3f3f3f3f3f3f3fint main(){ LL n; while(~scanf("%lld",&n)){ LL ans=1; for(LL i=2;i*i<=n;i++){ LL p=1,k=0; while(n%i==0){ p*=i; k++; n/=i; } ans*=k*(p-p/i)+p; } if(n>1) ans*=2*n-1; printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- java 基础5
- Java Web项目启动执行顺序
- [Linux]ubuntu下共享文件夹密码设置和重置-smbpasswd -a user
- 安装oracle11g时,安装界面跳出后又消失
- (三论文)目标检测
- POJ
- mybatis之resultMap实现一对一查询
- 552. Student Attendance Record II
- [RK3288][Android6.0] 有线耳机插拔事件监听小结
- Derby 初探
- Zabbix安装配置
- NSNotificationCenter中的addObserverForName
- 分治法--选择问题
- kubernetes网络原理