POJ 1284 Primitive Roots(素数原根)

来源:互联网 发布:淘宝仓库 编辑:程序博客网 时间:2024/06/06 04:10

原根概念:设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;}