51Nod 1135 原根

来源:互联网 发布:php unpack 二进制 编辑:程序博客网 时间:2024/06/08 03:37
1135 原根
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)
给出1个质数P,找出P最小的原根。
Input
输入1个质数P(3 <= P <= 10^9)
Output
输出P最小的原根。
Input示例
3
Output示例

2

没看太懂博客的最后一点的结论》》》》(太菜了我)

附上链接:点击打开链接

结论为:原根为a,若a^((p-1)/pk)恒不等于1,pk为p的质因子,则a为p的原根;

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAX=1000010;int prime[MAX];int sprime[MAX];int pri[MAX];int b,v;void isprime(){memset(pri,1,sizeof(pri));for(int i=2;i<MAX;i++){if(pri[i]){prime[b++]=i;for(int j=i+i;j<MAX;j+=i)pri[j]=0;}}}void DIVIDE(int n){v=0;int t=(int)sqrt(1.0*n);for(int i=0;i<t;i++){if(n%prime[i]==0){sprime[v++]=prime[i];while(n%prime[i]==0) n/=prime[i];}}if(n>1) sprime[v++]=n;} ll  KSM(ll a,ll b,ll c){ll ans=1;a=a%c;while(b>0){if(b&1)ans=(ans*a)%c;b/=2;a=(a*a)%c;}return ans;}int main(){int p;isprime();scanf("%d",&p);DIVIDE(p-1);for(int i=2;i<p;i++){int flag=1;for(int j=0;j<v;j++){int k=(p-1)/sprime[j];if(KSM(i,k,p)==1) {flag=0;break;}}if(flag){int u=i;printf("%d\n",u);break;}}return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肠胃涨气肚子变大怎么办 感觉肚子胀胀的怎么办 肚子胀撑的难受怎么办 肚子着凉了很疼怎么办 来月经肚子疼怎么办最快的方法 孕妇上大便有血怎么办 做完爱小腹坠痛怎么办 月经不来肚子胀怎么办 月经期间肚子疼的厉害怎么办 大姨吗来了肚子疼该怎么办 孕妇7个月拉肚子怎么办 胃疼肚子也疼怎么办 6个月孕妇肚子疼怎么办 孕妇4个月肚子疼怎么办 孕妇5个月拉肚子怎么办 4个月孕妇拉肚子怎么办 怀孕5个月拉肚子怎么办 肠胃老是胀气很不舒服怎么办 肚子里有气排不出来怎么办 小兔子不吃兔粮怎么办 泰迪肚子一直叫怎么办 狗狗肚子响该怎么办 狗狗肚子一直响怎么办 一刮风空调就响怎么办 胃里有气往上顶怎么办 胃里难受想吐怎么办 胃里感觉有水怎么办 喉咙总有气堵着怎么办 胃难受恶心想吐怎么办 胃里有气怎么办总放屁 肚子里有气很痛怎么办 胃有气排不出来怎么办 狗狗又吐又拉稀怎么办 狗吐了又拉稀怎么办 金毛狗又拉又吐怎么办 狗狗拉稀像水怎么办 狗狗拉稀带血怎么办 小狗狗又吐又拉怎么办 6个月婴儿拉肚子怎么办 一岁宝宝拉稀水怎么办 16个月宝宝拉稀怎么办