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

来源:互联网 发布:淘宝的保证金怎么退 编辑:程序博客网 时间:2024/05/21 11:16

题目链接: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;}


原创粉丝点击