写下来感觉也是没有用的哇TAT
还是找模板理解吧QAQ
1.Miller-rabin算法: 用来快速判断一个正整数是否为素数的算法。
它利用了费马小定理,即:如果p是质数,且a,p互质,那么$a^(p-1)$%p≡1。也就是对于所有小于p的正整数a来说都应该符合$a^(p-1)$%p≡1,因为质数φ(p)=p-1。那么根据逆否命题,对于一个p,我们只要举出一个a(a<p)不符合这个恒等式,则可判定p不是素数。
Miller-rabin算法就是多次用不同的a来尝试p是否为素数。
但是每次尝试过程中还做了一个优化操作,以提高用少量的a检测出p不是素数的概率。这个优化叫做二次探测。
【二次优化依据的定理:如果p是一个素数,那么对于x(0<x<p),若x^2%p=1,则x=1或p-1。
逆否命题:如果对于x(0<x<p),若x^2%p不等于1,则p不是素数。】
根据这个定理,我们要计算$a^(p-1)$%p是否等于1时,可以这样计算,设p-1=$2^t$ * k。我们从$a^k$开始,不断将其平方直到得到$a^(p-1)$(因为p-1=$2^t$ * k ,所以$a^k$平方t次可=p-1),一旦发现某次平方后mod p等于1了,那么说明符合了二次探测定理的逆否命题使用条件,立即检查x是否等于1或p-1,如果不是则可直接判定p为合数。
2.pollard-rho算法:一个用来快速对整数进行质因数分解的算法,需要与Miller-rabin共同使用。
求n的质因子的基本过程是:
1.先判断n是否为素数,如果不是则按照一个伪随机数生成过程来生成随机数序列。
2.对于每个生成的随机数判断与n是否互质。
3.如果互质则尝试下一个随机数。
4.如果不互质则将其公因子记作p,递归求解p和n/p的因子。如果n是素数则直接返回n为其素因子。 至于这个随机数序列是如何生成的暂时还不能理解,而且也是有多种不同的方式。这个序列生成过程中会产生循环,遇到循环则立即退出。
Pollard rho算法的原理:
1.通过某种方法得到两个整数a和b,而待分解的大整数为n。
2.计算p=gcd(a-b,n),直到p不为1(就是a-b与n不是互质),或者a,b出现循环为止。
3.然后再判断p=n?
4.如果p=n,那么返回n是一个质数。
5.否则返回p是n的一个因子,那么我们又可以递归的计算Pollard(p)和Pollard(n/p),这样,我们就可以求出n的所有质因子。
算法步骤:选取一个小的随机数x1,迭代生成x[i] = x[i-1]^2+c,一般取c=1,若序列出现循环则退出,计算p=gcd(x[i-1]-x[i],n),若p=1则返回上一步继续迭代,否则跳出迭代过程。若p=n,则n为素数,否则p为n的一个约数,并递归分解p和n/p。
ps:mr有点理解?pr不理解?→_→扎铁不老心