快速乘-在乘法溢出的边缘疯狂试探

(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

闲话:

 问题引入:对于两个1e18大小的数字,要求其乘积,或者mod一个1e18的数。
如果你有大数模板或者有时间手敲一个那就请忽略吧
&mep;直接相乘肯定会爆long long呀。怎么办呢?那就每次只乘2呗。模拟快速幂写一个快速乘咯。代码如下:

long long ksc(long long a, long long b, long long mod){
    long long res = 0;
    while(b){
        if(b&1) res = (res + a)%mod;
        (a<<=1)%=mod;
        b >>= 1;
    }
    return res;
}
Miller-Rabin素数测试

 这次素数测试中用到的乘法就是快速乘。不用快速乘的板子可能会溢出就会导致问题。

费尔马小定理:
如果p是一个素数,且0 < a < p, 则 a^(p-1) % p = 1

二次探测定理:
如果p是一个素数,且0 < x < p, 则方程x^2 % p = 1的解为: x = 1或 x = p-1

定理: 若n是素数, a是小于n的正整数, 则n对以a为基的Miller测试,结果为真

Miller测试进行k次,将合数当成素数处理的错误概率最多不会超过4^(-k)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值