主要就是原根的一些定理:
如果n有原根,那么n的原根的数目就是euler(erler(n));由于题中说n为奇素数,故euler(n)就是(n-1),故答案即为euler(n-1);
//============================================================================
// Name : 1284.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int a[1000010];
int n, num;
int euler(int m){
int curans = m, t = sqrt(m+0.5);
for(int i = 2;i <= t;i++){
if(m%i == 0){
curans = curans/i*(i-1);
while(m%i == 0){
m /= i;
}
}
}
if(m != 1){
curans = curans/m*(m-1);
}
return curans;
}
int main(){
freopen("a.txt", "r", stdin);
while(scanf("%d", &n)!=EOF){
num = euler(n-1);
printf("%d\n", num);
}
return 0;
}