Miller-Rabin素数测试
来源:互联网 发布:js 调用方法加new 编辑:程序博客网 时间:2024/05/29 16:56
素数测试
素数测试是数论中常见的算法,所以对它的优化也是很有必要的,其中Miller_Rabin素数测试是一种很有效的算法,优化,在探究该算法之前,我们先来探究一下素数测试的前生今世
素数的朴素筛法
从素数的定义方法,我们可以知道,素数P不会被2-(P-1)整除,我们即可以用这种性质来筛去所有合数,而通过该测试的即为素数。
具体代码实现如下:
Bool IsPrime(int num){ for(int i = 2 ; i <= num-1 ; i++){ if(num % i !=0){ return false; } } Return true; }
该算法的时间复杂度为
- 优化1:已知当对任意的
x>P−−√ 为P的因数,都有与之对应的y<P−−√ ,使得xy=P,所以一旦y能够筛掉P,则x亦能筛掉P,所以我们只需要判断P−−√以前的数字能否被P整除 - 优化2: 我们可以预处理一些小素数,比如判断出2是素数,则2的倍数就是合数,则预先处理2,则不需要用(2n)来筛P,则判断次数可以降低至一半
代码实现如下
Bool IsPrime(int num){ if(num == 2)return true; if(num % 2 ==0)return false; int to = sqrt ( num ); for(int i = 2 ; i <= to ; i+=2){ if(num % i !=0){ return false; } } Return true; }
如此优化后,该算法的时间复杂度降为
费马素数筛法
费马小定理证明了
即判断
虽然费马小定理可以被严格证明,但它的反定理不一定成立,其中最小的一个反例是341,对于这中非素数,而能通过费马测试的数,我们称之为伪素数.而且数论学家们已经证明这样的伪素数有无穷多个.但无论如何,我们可以知道,虽然通过费马测试的不一定是素数,但素数是一定可以通过费马测试,我们可以尽可能增多测试次数来增加测试准确度.
当我们以2为底测试时,代码如下:
int Fpow(int k,int p,int mod){ int ans = 1; while( p ){ if(p & 1)(ans *= k) %= mod; (k *= k) %= mod; p >>= 1 } return ans;}Bool IsPrime(int num){ if(num == 2)return true; if( Fpow(2,num-1,num) == 1)return true; return false;}
依上所述,341是第一个可以卡掉这个算法的伪素数.但我们以相同格式加入3时,即可筛掉341,即可以在1000以内没有判断错误,当我们使用2,3,5,7时,即可做到在20000以内没有错误判断,该算法的核心是快速幂,故时间复杂度较低,为
因此我们就有两位伟大的数论学家Miller,Rabin发明了Miller_Rabin算法
Miller_Rabin素数测试
然而伪素数,也是有弱点的,在证明威尔逊定理时,我们已经发现,对于任意一个质数P,都有所有小于P的数x都有与之配对的数y使得xy % p = 1
- Miller - Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin(素数测试)
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin 素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- Miller-Rabin素数测试
- 素数测试(Miller-Rabin测试)
- 解析 Miller - Rabin 素数测试思想
- Miller-Rabin测试-大素数问题
- 大数判断素数(Miller-Rabin测试)
- C++实现Miller-Rabin素数测试
- shiro
- PAT --- 1022. D进制的A+B (20)
- 3.1运算符、表达式
- 正整数数组的最小不可组成和
- 第一次运行Android Studio的配置和下载gradle
- Miller-Rabin素数测试
- linux修改线程优先级
- 如何使用Disruptor(三)写入 Ringbuffer
- AdvancedInstaller打包工具使用(六)
- 关于PLSQL中的数据库的备份和还原
- UE正则表达式语法
- 二叉查找树BST和红黑树,果然。。。
- 大佬博客备忘
- 11月04日解题报告