bzoj2705 [SDOI2012]Longge的问题(欧拉函数)
2018-03-17 16:17
399 查看
求∑ni=<
4000
/span>1gcd(i,n)。我们考虑n的因数x的贡献,就是x∗ϕ(n/x)。欧拉函数直接用公式求。
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; }
相关文章推荐
- BZOJ 2705([SDOI2012]Longge的问题-欧拉函数φ(i))
- BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)
- bzoj2705 [SDOI2012]Longge的问题 欧拉函数
- bzoj 2705: [SDOI2012]Longge的问题 欧拉函数
- bzoj 2705: [SDOI2012]Longge的问题【欧拉函数+gcd】
- bzoj 2705: [SDOI2012]Longge的问题 欧拉函数
- 【欧拉函数】BZOJ2705(SDOI2012)[Longge的问题]题解
- 【bzoj2705】【sdoi2012】【longge的问题】【欧拉函数】
- BZOJ - 2705: [SDOI2012]Longge的问题 【欧拉函数 一道必做的经典题】
- [欧拉函数]Bzoj2705 Longge的问题[SDOI2012]
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
- BZOJ 2705 [SDOI2012]Longge的问题(欧拉函数)
- BZOJ 2705 SDOI2012 Longge的问题 因数分解+欧拉函数
- bzoj2705[SDOI2012]Longge的问题 欧拉函数
- BZOJ2705 [SDOI2012]Longge的问题 【欧拉函数】
- BZOJ2705 [SDOI2012]Longge的问题 【欧拉函数】
- 【BZOJ 2705】【SDOI 2012】Longge的问题【欧拉函数】
- 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数
- 【数论】【枚举约数】【欧拉函数】bzoj2705 [SDOI2012]Longge的问题
- BZOJ2705 [SDOI2012]Longge的问题(欧拉函数)