求素数p的原根
定义: 设m>1,gcd(a,m)=1,使得成立的最小正整数d为a对模m的阶,记为δm(a)
如果δm(a)=φ(m),则称a是模m的原根
定理:设m>1,gcd(a,m)=1,那么正整数x是同于方程的一个根当且仅当δm(a) | x
定理:由欧拉定理得 gcd(a,n)=1
定理:模m有原根的充要条件是m=2,4,,其中p为奇质数,n为任意正整数
定理:素数必有原根,如果一个数n有原根那么他有φ(φ(n))个模n不同余的原根
求模素数p的原根的方法:对p-1素因子分解,即p-1=的标准分解式,若有
成立,
则a就是p的原根。(对于合数求原根,除了需要预先判断是否存在原根之外,还需要把p-1换成φ(p))
求素数的最小原根程序
const int maxn=;
int prime[maxn];
void Get_Prime(){
memset(prime,,sizeof(prime));
for(int i=;i<=maxn;i++){
if(!prime[i]) prime[++prime[]]=i;
for(int j=;j<=prime[]&&prime[j]<=maxn/i;j++){
prime[prime[j]*i]=;
if(i%prime[j]==) break;
}
}
//for(int i=1;i<=20;i++) cout<<prime[i]<<endl;
}
long long factor[][];
int fatCnt;
int GetFactors(long long x){
fatCnt=;
long long tmp=x;
for(int i=;prime[i]<=tmp/prime[i];i++){
factor[fatCnt][]=;
if(tmp%prime[i]==){
factor[fatCnt][]=prime[i];
while(tmp%prime[i]==){
factor[fatCnt][]++;
tmp/=prime[i];
}
fatCnt++;
}
}
if(tmp!=){
factor[fatCnt][]=tmp;
factor[fatCnt++][]=;
}
//for(int i=0;i<fatCnt;i++) cout<<"yinzi="<<factor[i][0]<<" mi="<<factor[i][1]<<endl;
return fatCnt;
}
template<class T> T fast_mod(T a,T b,T Mod){
a%=mod;
if(b==) return ;
T ans=,base=a;
while(b!=){
if(b&)ans=(ans*base)%Mod;
base=(base*base)%Mod;
b>>=;
}
return ans;
}
//判断一个数是否有原根
bool judge(int n){
if(n==||n==) return true;
GetFactors(n);
if(fatCnt==) return true;
if(fatCnt==&&factor[][]==&&factor[][]==) return true;
return false;
}
//返回最小的原根,如果没有则返回-1
int Solve(int P){
if(P==) return ;
//if(!judge(P)) return false;
GetFactors(P-);
for(int g=;g<P;g++){
bool flag=true;
for(int i=;i<fatCnt;i++){
int t=(P-)/factor[i][];
if(fast_mod(g,t,P)==) {
flag=false;break;
}
}
if(flag) return g;
}
}
求素数p的原根的更多相关文章
- 蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)
算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突 ...
- python中用filter求素数
#用filter求素数 #生成器,生成一个无限序列 def _odd_iter(): n=1 while True: n=n+2 yield n #筛选函数 def _not_divisible(n) ...
- hdu 4548 筛法求素数 打表
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题 ...
- PAT 07-3 求素数
求素数,这是一个“古老”的问题,每个学过编程的人都应该碰到过,这里是求第M+1到第N个素数,这么经典的问题,当然得给它写上一笔,下面是题设要求及代码实现 /* Name: Copyright: Aut ...
- UVA 10006 - Carmichael Numbers 数论(快速幂取模 + 筛法求素数)
Carmichael Numbers An important topic nowadays in computer science is cryptography. Some people e ...
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- poj3006 筛选法求素数模板(数论)
POJ:3006 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. 筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数. 用一个数组实现就是 ...
- Java求素数时出现错误
Java求素数时出现错误 1.具体错误如下 No enclosing instance of type Prime is accessible. Must qualify the allocation ...
- 筛法求素数Java
输出:一个集合S,表示1~n以内所有的素数 import java.util.Scanner; public class 筛法求素数 { public static void main(String[ ...
随机推荐
- Spring-cloud微服务实战【九】:分布式配置中心config
回忆一下,在前面的文章中,我们使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一个完整的微服务系统,不管是队内还是对外都已经比较完善了,那我们 ...
- Head First设计模式——代理模式
在HeadFirst设计模式中代理模式用了比较多的篇幅来讲解,其中的例子我感觉有些繁琐,所以我们这篇就不按照惯例用例子来阐述代理模式了.我们直接进入正题,分析模式本身的设计和解决的问题. 远程代理模式 ...
- 解决IIS程序池回收webapi定时程序造成的影响
问题描述: webapi中有一个定时器线程,在iis程序池在1740分钟回收后,定时器中止 问题解决步骤: 1.设置程序池定期回收,设置每天定时回收 2.在windows自带的任务计划中,添加一条任务 ...
- Caliburn.Micro框架之Bindings
新建一个WPF项目,将其命名为Caliburn.Micro.BindingsDemo 其次安装Caliburn.Micro,安装Caliburn.Micro的同时也会安装Caliburn.Micro. ...
- flex布局小结
2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持. Flex 是 Flexible Box 的缩写,意为&qu ...
- Spring Boot 配置拦截器方式
其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了.下面主要介绍两种常用的拦截器: 一.基于URL实现的拦截器: public class Log ...
- C++中static关键字的用法
运行一个完整的程序.我们可将整个存储区分为四块: (1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心. (2)堆区:堆来堆去的.得要人动手.所以得我们自己手 ...
- 【已解决2】pyinstaller UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position 110: invalid continuation byte
python打包exe解码错误问题 最近做了一个小项目,其中把自己写的python打包成exe文件.我用的是pyinstaller. 只需要打包主程序py文件就ok. 在打包过程中,遇到一 ...
- M5310-A 版本
模块外表 型号 BAND M5310-A MBRH0S04 +NB ...
- 关于将sublime中的代码高亮导出到博客中
第一步:打开sublime编辑器,用快捷键ctrl+shift+p调出control panel,在出现的输入框中输入install,按回车键 第二步:然后输入插件名称sublimehighlight ...