HDU 1787 - GCD Again (欧拉函数)
题意
求小于N的和N不互质的数
思路
减去phi(n)
代码
int euler_phi(int n)
{
int m = (int)sqrt(n + 0.5);
int ans = n;
for (int i = 2; i <= m; i++) if (n % i == 0)
{
ans = ans / i * (i-1);
while (n % i == 0) n /= i;
}
if (n > 1) ans = ans / n * (n-1);
return ans;
}
int main()
{
int n;
while (scanf("%d", &n), n)
printf("%d\n", n-1-euler_phi(n));
return 0;
}