您的位置:首页 > 其它

POJ1284 Primitive Roots (欧拉函数 & 原根)

2017-12-13 15:44 441 查看
题目链接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: