题意
传送门 POJ 2407
题解
假设 m = p 1 e 1 p 2 e 2 … p n e n m=p_1^{e_1}p_2^{e_2}\dots p_n^{e_n} m=p1e1p2e2…pnen
ϕ ( m ) = m × ∏ ( p i − 1 ) / p i \phi(m)=m\times \prod (p_i-1)/p_i ϕ(m)=m×∏(pi−1)/pi
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
#define inf 0x3f3f3f3f
#define maxn 100005
int euler_phi(int n)
{
int res = n;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
res = res / i * (i - 1);
for (; n % i == 0; n /= i) ;
}
}
if (n != 1) res = res / n * (n - 1);
return res;
}
int main()
{
int n;
while (~scanf("%d", &n) && n)
{
printf("%d\n", euler_phi(n));
}
return 0;
}