大意不再赘述。
思路:
简单的欧拉函数的求解。
= n(1-1/P1)(1-1/P2)....(1-1/Pn);Pi为n的约数。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long LL;
LL n;
LL euler_phi(LL n)
{
LL m = (int)sqrt(n + 0.5);
LL ans = n;
for(LL 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;
}
/*LL euler_phi(LL n)
{
LL m = (int)sqrt(n + 0.5);
LL ans = n;
for(LL i = 2; i <= m; i++) if(n % i == 0)
{
ans = ans - ans/i;
while(n % i == 0) n /= i;
}
if(n > 1) ans = ans - ans / n;
return ans;
}*/
void solve()
{
LL ans = euler_phi(n);
printf("%lld\n", ans);
}
int main()
{
while(scanf("%lld", &n) && n)
{
solve();
}
return 0;
}