快速乘和改造快速幂

快速乘和改造快速幂

快速乘

​ 因为我们知道乘法有时候会溢出,即使是long也可能因为结果过大而溢出(当模数也是long类型时)。所以我们需要寻找一种能高效完成乘法操作并且不会爆 long 的算法,也就是快速乘。即不会溢出采用快速幂,会溢出采用快速乘。

//快速乘
//计算大数:a * b(mod modd) 10*(11)
public static long quickMultiple(long a,long b,long modd){
    long res = 0l;
    while (b!=0){
        if((b&1)==1) res = (res+a)%modd;
        a = (a << 1)%modd;
        b = (b >> 1);
    }
    return res;
}

快速幂改造

利用快速乘改造快速幂

//利用快速乘改造快速幂解决溢出问题
//计算a^n%p
public static long quickPowUseMul(Long a,Long n,Long p){
    long res = 1l;
    while (n!=0){
        if ((n&1)==1)   res = quickMultiple(res,a,p);
        n = n>>1;
        a = (a * a)%p;
    }
    return res;
}

典型例题

第十届蓝桥杯(省赛)试题E:RSA解密


## 参考材料

g/?id=70878&compatibility=false)


参考材料

[1]快速乘总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值