Miller_Rabbin素性判定和Pollard_rho分解质因数算法

博客介绍了Miller-Rabbin素性判定算法和Pollard_rho质因数分解算法。内容包括快速乘法、快速幂和欧几里得算法的基础知识,接着详细阐述了费马小定理、引理和Miller-Rabbin算法的二次探测优化。还讨论了Pollard_rho算法基于生日悖论的思想,并提供了算法的实现代码。
摘要由CSDN通过智能技术生成

看了快两天的Miller_Rabbin素性判定算法和Pollard_rho质因数分解算法了。在博客上记录一下以免以后忘记。
代码中的ll均为long long,即typedef long long ll;

一:在学之前要用到的东西

1.快速乘法

原理可以见这里,基本思路就是二进制运算速度>>十进制的运算速度
直接上代码了:

ll mult(ll a, ll b, ll MOD) {
    ll ret = 0;
    while (b) {
        if (b & 1) {
            b--;
            ret = (ret + a) % MOD;
        }
        else {
            b >>= 1;
            a = (a + a) % MOD;
        }
    }
    return ret;
}

2.快速幂

能看到这篇的应该都会,直接上代码:

ll Pow(ll a, ll b, ll MOD) {
    ll ret = 1;
    while (b > 0) {
        if (b & 1)
            ret = mult(ret, a, MOD) % MOD;
        a = mult(a, a, MOD) % MOD;
        b >>= 1;
    }
    return ret;
}

3.欧几里得算法

能看到这篇的应该都会,直接上代码:

ll gcd(ll a, ll b) {
    if (a < b) {
        ll t = a;
        a = b;
        b = t;
    }
    if (b == 0)
        return a;
    return gcd(b, a % b);
}

二:Miller_Rabbin素性判定

1.费马小定理

先说一下定理的内容:

pgcd(a,p)=1ap11(modp)

其中的一个特例就是:当p为质数时,就有
apa(modp)

(之所以要写出来不仅时因为这个定理非常重要,还因为自己以前一直以为那个特例是费马小定理。)

证明方法的话网上有好多(太高端了我也看不懂)。在某博客上看到一个妙不可言的证明方法。感受到人类智慧恐怖。

2.一个引理

先说引理内容:

p0<x<p,xNx=1x=p1

基于这个引理,就可以优化费马小定理,得到下面的Miller_Rabbin算法二次探测优化。

3.Miller_Rabbin算法二次探测优化

引用一下在这里看到的Miller_Rabbin算法。基本内容就是
要判断

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值