bzoj 2705: [SDOI2012]Longge的问题 欧拉函数
2705: [SDOI2012]Longge的问题
Time Limit: 3 Sec Memory Limit: 128 MB[Submit][Status][Discuss]
Description
Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。
Input
一个整数,为N。
Output
一个整数,为所求的答案。
Sample Input
6
Sample Output
15
HINT
【数据范围】
对于60%的数据,0<N<=2^16。
对于100%的数据,0<N<=2^32。
思路:欧拉;
枚举N的约数pi,gcd为pi的个数为phi(N/pi);
#include<bits/stdc++.h> using namespace std; #define ll long long #define esp 0.00000000001 const int N=1e5+10,M=1e6+10,inf=1e9+10,mod=1000000007; ll phi(ll n) { ll i,rea=n; for(i=2;i*i<=n;i++) { if(n%i==0) { rea=rea-rea/i; while(n%i==0) n/=i; } } if(n>1) rea=rea-rea/n; return rea; } int main() { ll x,y,z,i,t; scanf("%lld",&x); ll ans=0; for(i=1;i*i<=x;i++) { if(x%i==0) { ans+=i*phi(x/i); if(i*i!=x) ans+=(x/i)*phi(i); } } printf("%lld\n",ans); return 0; }