码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1135 原根

时间:2017-03-19 13:08:08      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:black   type   gray   时间   质数   https   blank   等于   bbb   

基准时间限制: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 原根

标签:black   type   gray   时间   质数   https   blank   等于   bbb   

原文地址:http://www.cnblogs.com/ruojisun/p/6579656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!