• 求一个质数的最小原根


    暴力枚举+判断

    一般数的原根都不会太大,所以暴力枚举能跑出来。

    原根有一个性质: (g^kequiv 1 pmod P) 当且仅当 (k=P-1) 时成立((P) 是质数)

    #include<bits/stdc++.h>
    using namespace std;
    #define rint register int
    int cnt,fac[1000010];
    const int P=1004423491;
    void getfac(int x) {
    	for(rint i=2,mx=sqrt(x);i<=mx;++i) {
    		if(x%i==0) {
    			fac[++cnt]=i;
    			while(x%i==0)x/=i;
    		}
    	}
    }
    int qpow(int n,int k) {
    	int res=1;
    	while(k) {
    		if(k&1)res=1ll*res*n%P;
    		n=1ll*n*n%P;
    		k>>=1;
    	}
    	return res;
    }
    bool check(int x) {
    	for(rint i=1;i<=cnt;++i) {
    		if(qpow(x,(P-1)/fac[i])==1)return 0;
    	}
    	return 1;
    }
    int main() {
    	getfac(P-1);
    	for(rint i=2;i<P;++i) {
    		if(check(i)) {
    			printf("%d
    ",i);
    			return 0;
    		}
    	}
    }
    
    路漫漫其修远兮,吾将上下而求索
  • 相关阅读:
    .net证书Rsa加密
    $.ajax
    EF通用CRED
    JSON.pase()
    mysql 使用EF6.0CodeFirst
    jenkins 自动构建——shell脚本
    nginx配置示例
    easyui 随笔
    javascript 随笔
    asp.net mvc4 过滤器的简单应用:登录验证
  • 原文地址:https://www.cnblogs.com/zzctommy/p/12537369.html
Copyright © 2020-2023  润新知