11.04T2 暴力模拟

3814 -- 【模拟试题】原根

Description

Input

  输入仅一个正整数m。

Output

  以递增序依次输出模m的所有原根,每行输出一个原根。
  如果不存在模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

posted @ 2018-11-04 19:01  saionjisekai  阅读(245)  评论(0编辑  收藏  举报