首页 > 其他 > 详细

Miller-Rabbin素数测试

时间:2020-03-23 21:39:14      阅读:63      评论:0      收藏:0      [点我收藏+]

前言

\(Miller-Rabbin\) 素数测试可以判断比较大的数是不是素数。
但是判断的结果可能是伪素数。

前置知识

费马小定理:

\[若p为素数是,满足 a^{p-1} \equiv 1(mod\ p) \]

二次探测定理:

\[若p为奇素数且 x^2 \equiv 1(mod\ p);\\则x \equiv 1(mod\ p)或者 x \equiv p-1(mod\ p) \]

思路

判断一个数 n 是不是素数,随机一个数 x (2 ≤ x < n),
先对 x 的 n-1 次方进行 n 取模
在运用二次探测定理判断结果是否为 1 或者 n-1,
满足则为素数。
其中当x=2时需要进行特判

代码

Code:
inline bool millerRabbin(ll n){
    if(n<3)return n==2;
    ll a=n-1,b=0;
    while(a%2==0)a/=2,++b;
    for(int i=0,j;i<testTime;++i){
    	ll x=rand()%(n-2)+2,v=binpow(x,a,n);
		if(v==1||v==n-1)continue;
		for(j=0;j<b;++j){
	    	v=multi(v,v,n);
	    	if(v==n-1)break;
		}
		if(j>=b)return false;
    }
    return true;
}

Miller-Rabbin素数测试

原文:https://www.cnblogs.com/VagrantAC/p/12555066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!