首页 > 代码库 > 51nod 1135 原根
51nod 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
欧拉函数+快速幂
屠龙宝刀点击就送
#include <cstdio>typedef long long LL;LL m,cnt[112441],k;bool qm(LL a,LL b,LL Mod){ LL r=1%b,base=a; while(b) { if(b&1) r=r*base%Mod; b>>=1; base=base*base%Mod; } return r==1;}int main(){ scanf("%d",&m); LL tmp=m-1; for(LL i=2;i*i<=tmp;i++) { if(tmp%i==0) { while(tmp%i==0) tmp=tmp/i; cnt[k++]=i; } } if(tmp>1) cnt[k++]=tmp; for(LL i=2;i<m;++i) { LL flag=1; for(LL j=0;j<k;++j) { if(qm(i,(m-1)/cnt[j],m)) { flag=0; break; } } if(flag) { printf("%d",i); return 0; } } return 0;}
51nod 1135 原根
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。