题意:给定奇素数N,求N的原根。
思路:定理:奇素数N的原根等于φ(N-1),即直接求N-1的欧拉函数。
题目链接:http://poj.org/problem?id=1284
View Code
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include <cstring> 5 #include <string> 6 #include <algorithm> 7 #include <iostream> 8 using namespace std; 9 const int N=65536; 10 11 int n; 12 13 int phi(int n){ 14 n--; 15 int ans=n; 16 for(int i=2;i*i<=n;i++){ 17 if(n%i==0){ 18 ans=ans-ans/i; 19 while(n%i==0) n/=i; 20 } 21 } 22 if(n>1) ans=ans-ans/n; 23 return ans; 24 } 25 26 int main(){ 27 28 // freopen("data.in","r",stdin); 29 // freopen("data.out","w",stdout); 30 31 while(scanf("%d",&n)!=EOF){ 32 printf("%d\n",phi(n)); 33 } 34 return 0; 35 }