原根--解题报告 sn0823T1

来源:互联网 发布:穆斯林 欧洲 知乎 编辑:程序博客网 时间:2024/06/05 18:09

题意为:给一个数M,求模M的所有原根。

原根:(与M互质,小于M)以g为底,使g的j次方%M所得值为1的最小指数j为phi(M)时,g便是M的一个原根。

方法:按题目说的去模拟吧-_-!.

代码如下

#include<iostream>#include<math.h>#include<algorithm>#include<stdio.h>#include<string.h>using namespace std;int m,phi=0; inline int gcd(int x,int y){    if (y==0) return x;    return gcd(y,x%y);}int main(){scanf("%d",&m);for(int i=1;i<m;i++){if(gcd(m,i)==1){phi++;}}//裸求欧拉函数bool flag=0;for(int i=1;i<=m;i++){if(gcd(i,m)==1)//如果互质{int jian=1;int jk=0;for(int j=1;j<=phi;j++){jian=(jian*i)%m;//看i的几次方%m=1if(jian==1){jk=j;break;}}if(jk==phi)//如果最小的次方数是m的欧拉函数{flag=1;//有cout<<i<<endl;//输出它} }  }  if(flag==0) { cout<<-1<<endl;//如果没有输出-1 } } 


0 0
原创粉丝点击