51nod 1135 原根 (数论)

来源:互联网 发布:大数据是一种思维方式 编辑:程序博客网 时间:2024/06/06 03:00

题目链接:
原根例题

求模素数P原根的方法:对这里写图片描述素因子分解,即这里写图片描述P1的标准分解式,若恒有这里写图片描述
成立,则这里写图片描述就是这里写图片描述的原根。(对于合数求原根,只需把这里写图片描述换成这里写图片描述即可)。

代码:

#include<bits/stdc++.h> using namespace std;int p[100010];int t = 0;//http://blog.csdn.net/acdreamers/article/details/8883285void divide(long long n){    for(int i = 2; i * i <= n; i++){        if(n % i == 0){            p[t ++] = i;            while(n % i == 0) n /= i;        }    }}int solve(long long x,long long n,long long m){    long long res = 1;    while(n > 0){        if(n & 1) res = (res * x) % m;        x = (x * x) % m;        n >>= 1;    }    return res;}int main(){    long long a;    cin >> a;    divide(a - 1);//求a-1所有的质因子     for(int i = 2; i < a; i++)    {        bool flag = false;        for(int j = 0; j < t; j++)        {            if(solve(i,(a - 1) / p[j], a ) == 1)//判断是否是原根             {                flag = true;                break;            }        }        if(!flag){            cout << i << endl;            break;        }    }    return 0;}
原创粉丝点击