poj 1284
主要就是原根的一些定理:
如果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; }