NOIP34

质数原根
问题描述
如果一个数 x(0< x< p),满足集合 {xi%p∣1≤i< p} 等价于集合 {1,⋯,p−1},则我们称 x 为质数 p 的一个原根。例如,假设 p 为 3,2 的各项幂对 3 取余的结果为 2,1,则 2 为质数 p 的一个原根。
现在已知一个质数 p,求质数 p 的原根个数。
输入格式
输入有多组数据,不超过100行。
每组数据输入一行,输入一个质数 p(3≤p≤100,000)。
输出格式
对于每组测试数据,输出一行,输出质数 p 的原根个数。
样例输入
11
13
17
样例输出
4
4
8

#include 
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<

你可能感兴趣的:(jisuanke,NOIP)