大意原根的求解。
思路:如果P是素数,原根的个数为α(P-1)。
扩展阅读:http://zh.wikipedia.org/wiki/%E5%8E%9F%E6%A0%B9#.E6.80.A7.E8.B4.A8
#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-1);
printf("%lld\n", ans);
}
int main()
{
while(~scanf("%lld", &n))
{
solve();
}
return 0;
}