51nod 1135 原根 (数论)

来源:互联网 发布:android 防止sql注入 编辑:程序博客网 时间:2024/06/13 20:17

数论问题,花了两小时才解决,要用到费马小定理

代码如下:

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=31623;int bz[maxn],kb=0;;bool jg[maxn]={0};ll suanm(ll a,ll n,ll m){ll sum=1,t=a;while(n){if(n%2)sum=(sum*t)%m;t=(t*t)%m;n/=2;}return sum;}void init(){int i,j;for(i=2;i<maxn;i++){if(jg[i]==0){for(j=2*i;j<maxn;j+=i)jg[j]=1;bz[kb++]=i;}}}int main(){init();ll m;cin>>m;ll i;for(i=2;i<m;i++){ll t=m-1,j=0;bool ff=0;while(t){if(t%bz[j]==0)while(t%bz[j]==0)t/=bz[j];//cout<<bz[i]<<' '<<t<<endl;if(suanm(i,(m-1)/bz[j],m)==1){ff=1;break;}j++;if(t<=bz[j]||j>=kb)break;}if(ff==1)continue;else break;}cout<<i<<endl;}


0 0
原创粉丝点击