@ZCDHJ
2018-09-15T13:49:59.000000Z
字数 532
阅读 419
欧拉函数
对于 ,我们可以知道 。也就是 与 互质。那么,枚举每个最大公因数 ,求一下欧拉函数就行了。注意每次枚举 到 就行了,然后再处理 。
#include <iostream>
#include <cmath>
#include <cstdio>
typedef long long LL;
int N;
LL Ans;
LL Phi(int x)
{
LL res = x;
int n = sqrt(x);
for(int i = 2; i <= n; ++i)
{
if(x % i == 0)
{
res = res / i * (i - 1);
while(x % i == 0) x /= i;
}
}
if(x > 1) res = res / x * (x - 1);
return res;
}
int main()
{
scanf("%d", &N);
int n = sqrt(N);
for(int i = 1; i <= n; ++i)
{
if(N % i != 0) continue;
Ans += LL(i) * Phi(N / i);
if(i * i != N) Ans += LL(N / i) * Phi(i);
}
printf("%lld\n", Ans);
}