MillerRabin 快速的素数概率判定法
2016-08-19 21:29
369 查看
本文有严重纰漏, 请勿阅读
2.原理:
介绍费马小定理:对于每一个素数p,都有ap−1≡1(modp)
但是不是对于每一个有ab−1≡1(modb)的b都是素数
如果存在b满足上述规则,那么b有3/4的几率为素数
MillerRabin通过多次随机生成b并使用以上方法进行判断,能把错误的几率降到1/4k,其中k为判断次数
分母指数级扩大让概率随k的增大迅速趋近于0。当k达到10时判断错误的几率已经降到百万分之一,k达到20时几乎不会出错。
黑科技的力量啊 = =
MillerRabin 快速的素数概率判定法
1.作用:快速判断单个数是否为质数2.原理:
介绍费马小定理:对于每一个素数p,都有ap−1≡1(modp)
但是不是对于每一个有ab−1≡1(modb)的b都是素数
如果存在b满足上述规则,那么b有3/4的几率为素数
MillerRabin通过多次随机生成b并使用以上方法进行判断,能把错误的几率降到1/4k,其中k为判断次数
分母指数级扩大让概率随k的增大迅速趋近于0。当k达到10时判断错误的几率已经降到百万分之一,k达到20时几乎不会出错。
黑科技的力量啊 = =
typedef long long LL; namespace millerrabin{ inline LL advpow(LL a,LL b,LL c){ LL ret=1; while(b){ if(b&1)ret*=a,ret%=c; a*=a; a%=c; b>>=1; } return ret; } int random(const int&mod){ srand(rand()*rand()*rand()); return rand()%mod; } bool jdPrime(const int&num,const int&eps){ if(num<=3)return true; int cnt=0; while(cnt<=eps){ int a=random(num)+2; if(num%a==0)continue; if(advpow(a,num-1,num)%num!=1)return false; cnt++; } return true; } }
相关文章推荐
- Pseudoprime numbers poj3641(快速幂+素数判定)
- POJ - 3641 Pseudoprime numbers <快速幂加素数判定>
- 素数 快速判定并打表
- 快速判定素数
- POJ 3641 Pseudoprime numbers(快速幂+素数判定)
- hdu 1905 poj3641素数判定与快速幂取余
- POJ 3641 -- 快速幂运算,素数判定
- 素数判定(米勒测试定理-费马小定理+快速乘)
- 算法杂项:快速判定素数(素数表)
- 如何快速判定一个或多个素数
- 【POJ】-3641-Pseudoprime numbers(快速幂,大数素数判定)
- Pseudoprime numbers伪素数(快速幂+判定素数)
- 【hdu】 Pseudoprime numbers 伪素数(快速幂+判定素数)
- ZOJ3758:Singles' Day(快速素数判定法)
- 九度OJ 1047:素数判定 (素数)
- hdu_2012素数判定
- Poj 2662,2909 Goldbach's Conjecture (素数判定)
- [原]素数判定
- 数论:素数判定
- loj#2325. 「清华集训 2017」小 Y 和恐怖的奴隶主 (矩阵快速幂优化概率dp)