质数的原根个数

#include <iostream>
using namespace std;

int euler(int n){
    int  res=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            res=res/i*(i-1);
            while(n%i==0){
                n/=i;
            }
        }
    }
    if(n>1){
        res=res/n*(n-1);
    }
    return res;
}



int main() {
    int n;
    while(scanf("%d",&n)==1)
    cout<<euler(n-1)<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/amf12345/article/details/89113003