水平较水,想不到,看的讨论版
与n的公约数,肯定是n的因子
那我们枚举n的因子就好了
假设因子为x,那么x的贡献次数就是1-n有多少个数与n的gcd=x,即1-n/x有多少个数与n/x互质,即phi(n/x)
#include <bits/stdc++.h>
typedef long long LL;
LL getEuler(LL num)
{
LL res = num;
for(int i = 2; i*i <= num; ++i)
{
if(num%i == 0)
{
res -= res/i;
while(num%i == 0)
num /= i;
}
}
if(num > 1) res -= res/num;
return res;
}
int main()
{
int n;
LL res = 0;
scanf("%d",&n);
for(int i = 1; i*i <= n; ++i)
{
if(n%i == 0)
{
if(i*i == n)
res += getEuler(i)*i;
else
res += getEuler(n/i)*i + getEuler(i)*(n/i);
}
}
printf("%lld\n",res);
return 0;
}