11.04T2 暴力模拟
3814 -- 【模拟试题】原根
Description
Input
输入仅一个正整数m。
Output
以递增序依次输出模m的所有原根,每行输出一个原根。
如果不存在模m的原根,输出-1。
如果不存在模m的原根,输出-1。
Sample Input
7
Sample Output
3
5
Hint
暴力模拟,怎么暴力怎么来,详见代码
code:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int gcd(int a,int b) { 5 if(a<b)swap(a,b); 6 while(a=a%b)swap(a,b); 7 return b; 8 } 9 int phi; 10 int main() { 11 int m; 12 cin>>m; 13 for(int i=1; i<=m; i++) { 14 phi+=gcd(i,m)==1; 15 } 16 int f=0; 17 if(m==1){ 18 cout<<1; 19 return 0; 20 } 21 for(int i=1; i<=m; i++) { 22 int ans=1; 23 int flag=0; 24 if(gcd(m,i)!=1)continue; 25 for(int d=1;;d++) { 26 (ans*=i)%=m; 27 if(ans==1) { 28 if(d==phi) 29 flag=1; 30 break; 31 } 32 } 33 if(flag) { 34 cout<<i<<"\n"; 35 f=1; 36 } 37 } 38 if(f==0)cout<<-1; 39 return 0; 40 }
over