筛素数方法(二)—— 费马小定理及MR素数判断

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

 

注明:本文中的x^y表示x的y次方

 

一、费马小定理

1.1 内容
若p为素数,a为正整数,且gcd(a,p)=1,则a^(p−1)≡1(mod p)。
1.2 证明
因为p为素数,所以gcd(i,p)=1(1<=i<=p-1,i为整数),可推出①gcd((p-i)!,p)=1,又因为gcd(a,p)=1,所以gcd(i∗a,p)=1,则②没有一个i*a是p的倍数。 
设a=b*p+r,则gcd(i*r,p)=1,没有一个i*r是p的倍数。
假设有两个i*r同余于模p,则c*r≡d*r(mod p)(c<d),那么(d-c)*r≡0(mod p),即p|(d−c)∗r。由于1<=d−c<=p−1,这与没有一个i*r是p的倍数矛盾。所以i*r中没有任何两个同余与模p得证,即③i*a中没有任何两个同余与模p。 
证明了①②③,我们就可以证明费马小定理了: 
由于②③,我们可以得知i*a%p之后一定是1,2,3,…,p-1的一个排列,也就是: 
a∗2a∗3a∗…∗(p−1)a≡1∗2∗3∗…∗(p−1)(mod p),即: 
(p−1)!∗a^(p−1)≡(p−1)!(mod p) 
因为①,所以可以同除以(p-1)!,得a^(p−1)≡1(mod p),费马小定理得证。

 

 

 

二、MR素数判断(优点:速度快  缺点:准确性低)

2.1 方法
Miller-Rabin素数测试(简称MR素数测试)利用费马小定理快速判断一个数是否是素数,但是由于这种方法只是较高概率不出现错误,并不是完全正确的,所以在时间充裕的情况下可不必使用这个方法。
2.2 实现
因为当n是素数,且gcd(a,n)=1时,a^(n−1)≡1(mod

费马小定理MR素数判断 费马小定理MR素数判断 阅读详情

相关推荐

MR素性探测

MR素性探测 简介 MR算法全称是Miller-Rabin测试,是一个非确定的算法,用于判断一个数是否是质数.虽然是一个非确定的算法,但是只要巧妙地选取参数,在一定范围内就是一个确定性的算法. 前置条件:费马小定理 1 ≡ a^(p-1) (mod p) Miller和Rabin两个人的工作让Fermat素性测试迈出了革命性的一步,建立了传说中的Miller-Rabin素性测试算法。 新的测试基...

Dawn-K の Blog 1529

素数判定法(Miller-Rabin素数判定)

2.次探测:如果p是一个素数,0

Gsiredo的博客 710

Hiho 数论一·Miller-Rabin质数测试,大素数判断

题目1 : 数论一·Miller-Rabin质数测试 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近突然对密码学产生了兴趣,其中有个叫RSA的公钥密码算法。RSA算法的计算过程中,需要找一些很大的质数。 小Ho:要如何来找出足够大的质数呢? 小Hi:我倒是有一个想法,我们可以

Tham 在思索中前行! 3114

费马小定理素数

素性测试(Miller-Rabin测试) 首先,一个叫费马的人提出:如果一个数p是质数,且gcd(a,p)==1。那么(a^p)%p==a,这就是费马小定理。 然后我们反向利用这个定理,随便拿一个a,来算一算(ap)%p,如果等于a,就认为p是素数。 #include&lt;bits/stdc++.h&gt; using namespace std; //快速幂 void solve(int...

xizi_ghq的博客 1495

Miller-Rabin素数判定

素数判定

mqnu0的博客 427

判断素数费马小定理

<br />1)Sieve of Eratosthenes法<br /><br /><br />由于一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。例如要查找100以内的质数,首先2是质数,把2的倍数去掉;此时3没有被去掉,可认为是质数,所以把3的倍数去掉;再到5,再到7,7之后呢,因为8,9,10刚才都被去掉了,而100以内的任意合数肯定都有一个因子小于10(100的开方),所以,去掉,2,3,5,7的倍数后剩下的都是质数了。<br /> 

mylespower的专栏 5156

费马小定理判断素数

// 根据费马小定理判断P是否为一个素数 #include <iostream> #include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; ll p; ll Pow(ll a,ll b) { ll res=1; while(b) { if(b&1) res=

跟随内心的渴望 2186

费马小定与MR素数判断

   

cj1064789374的博客 186

Miller-Rabin随机性素数测试方法

关于素数测试 素数测试就是判断一个整数是素数还是合数。一般判断素数p的方式是通过判断2到根号p内的整数是否可以整除p来实现。时间复杂度为O(p1/2)。如果p是一个m位进制整数,m=floor(Ig(p+1)),O(p1/2)=O(2m/2)。 然而对于大整数而言,这样的时间复杂度显然是不可以接受的。 费马小定理:if n is prime   ∀a∈Zn∗ , an−1≡1(modn)if\space n\space is\

WedsonLin的博客 630

费马小定理MR素数探测法) v2.0

#include #include #include #include using namespace std; typedef long long LL; LL PowerMod(LL a, LL b, LL n) { if (b == 1) return a % n; LL x = PowerMod(a, b >> 1, n); x = x * x %

Gemini 738

【模板】素数、素性测试

素数选、标记、素数判断

高斯的博客 294

c语言欧拉求解素数个数,初学MillerRabin素数测试

前言$MillerRabin$素数测试是一种很实用的素数判定方法。它只针对单个数字进行判定,因而可以对较大的乃至于$long\ long$范围内的数进行判定,而且速度也很快,是个十分优秀的算法。前置定理费马小定理:$a^{p-1}\equiv1(mod\ p)$(详见此博客:费马小定理)次探测定理:若$p$为奇素数且$x^2\equiv1(mod\ p)$,则$x\equiv1(mod\ p)$...

weixin_39605835的博客 252

素数相关法及素数的性质

1.素数法    1.1 素数的普通素数的普通就是应用一个素数不能分解成除1和其本身的两数相乘,进而进行素数的标记的做法。用法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到子为空时结束。如有:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...

AlessandroVidi的博客 1874

Miller-Rabin素数测试

Miller-Rabin素数测试 给出一个小于1e18的数,问它是否为质数?不超过50组询问。hihocoder 我是真的菜,为了不误导他人,本篇仅供个人使用。 首先,一个1e18的数,朴素\(O(\sqrt{n})\)素数判定肯定爆炸。怎么办呢? 我们知道,对于素数p,只要a不是p的倍数,一定有\(a^{p-1}=1\mod p\)。那么,我们是不是可以选出某些a,对于要判定的数p...

378

Miller-Rabin随机性素数测试方法 & [CodeVS 1702] 素数判定2

Miller-Rabin算法用于判定某数x是否为素数。如果x被判定为合数,它一定是合数。如果x被判定为素数,它有很大的概率是素数,此概率取决于参数。 本文阐述了Miller-Rabin算法的过程和原理,并给出CodeVS 1702 素数判定2 的代码。

chrt's blog 840

51nod 1106 质数检测——Mr素数

质数检测一般都是根号n的写法 当然Mr素数方法可以实现log的复杂度2333 Mr素数的话 我们根据费马小定理只要P是素数 那么另一个素数x 满足 x^P-1≡1(mod P) 同时 x^2%P==1 的解只有 x==1||x==P-1 可以利用这第个式子做次探测 利用 2 3 5 7 11 13 17 这七个素数可以保证int内正确性QAQ 当然记得判断2 3 5 7 11 ...

weixin_34019144的博客 188

初学MillerRabin素数测试

前言 \(MillerRabin\)素数测试是一种很实用的素数判定方法。 它只针对单个数字进行判定,因而可以对较大的乃至于\(long\ long\)范围内的数进行判定,而且速度也很快,是个十分优秀的算法。 前置定理 费马小定理:\(a^{p-1}\equiv1(mod\ p)\)(详见此博客:费马小定理次探测定理:若\(p\)为奇素数且\(x^2\equiv1(mod\ p)\),则\(...

weixin_30838873的博客 172

Miller Rabin素数测试 复习小记

Preface为什么是复习小记?因为忘了个精光QAQMiller Rabin素数测试基于以下两个原理:费马小定理(a,p)=1(a,p)=1且pp是质数,则ap−1≡1(modp)a^{p-1}≡1\ (mod\ p),反之不一定成立次探测定理若pp是素数,则x2≡1(modp)x^2≡1\ (mod\ p)的解只有x=1x=1或x=p−1(−1)x=p-1(-1) 也即如果x2≡1

LYD729 834
上一篇: 线段树模板
下一篇: Trie:字典树
chenxiaoran666
博客等级 码龄9年 81粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值