POJ 1284 Primitive Roots(素数原根)

原根概念:设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数

本题需应用的结论:若p是一个素数,则p有φ(p-1)个原根。

#include <iostream>
using namespace std;
const int maxn =10000+5;
int ph(int x)
{
    int ans=x;
    for(int i=2;i*i<=x;i++)
        if(x%i==0){
            ans=ans/i*(i-1);
            while(x%i==0) x/=i;
        }
    if(x>1) ans=ans/x*(x-1);
    return ans;
}
int main(){
    int n;
    while(cin>>n){
        cout<<ph(n-1)<<endl;
    }
    return 0;
}


你可能感兴趣的:(POJ 1284 Primitive Roots(素数原根))