您的位置:首页 > 其它

bzoj2705 [SDOI2012]Longge的问题(欧拉函数)

2018-03-17 16:17 399 查看
求∑ni=<
4000
/span>1gcd(i,n)。我们考虑n的因数x的贡献,就是x∗ϕ(n/x)。欧拉函数直接用公式求。

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 10000010
inline char gc(){
static char buf[1<<16],*S,*T;
if(S==T){T=(S=buf)+fread(buf,1,1<<16,stdin);if(S==T) return EOF;}
return *S++;
}
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll n,ans=0;
inline ll phi(ll x){
ll res=x,xx=x;
for(int i=2;i*i<=x;++i){
if(xx%i) continue;
res/=i;res*=i-1;
while(xx%i==0) xx/=i;
}if(xx!=1) res/=xx,res*=xx-1;return res;
}
int main(){
//  freopen("a.in","r",stdin);
n=read();ll x=0;
for(x=1;x*x<n;++x){
if(n%x) continue;
ans+=x*phi(n/x);ans+=n/x*phi(x);
}if(x*x==n) ans+=x*phi(x);
printf("%lld\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: