题目链接:http://poj.org/problem?id=1284
题意:给定一个奇素数,求该数有多少原根
思路:φ(φ(n)) 表示n的原根的数目
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int p;
int phi(int n){
int res = n,t = n;
for(int i = 2; i * i <= n; i ++){
if(t % i == 0){
res = res / i * (i - 1);
while(t % i == 0) t /= i;
}
}
if(t > 1) res = res / t * (t-1);
return res;
}
int main(){
while(~scanf("%d",&p)){
printf("%d\n",phi(p-1));
}
return 0;
}