算法——快速幂取模

本文探讨了快速幂取模的算法思想,强调了积的取余等于取余的积的取余的数学引理,并指出在计算过程中需要注意的数据类型溢出问题。通过举例说明了如何利用指数的奇偶性优化计算,并分享了在解决指数过大问题时的数学技巧。文章还反思了在实现过程中遇到的错误和解决方案,最后引用了他人优秀的代码并表达了对作者的敬佩。
摘要由CSDN通过智能技术生成

输入三个数,求a的b次方,对c取模
快速幂取模的思路:
a对b取模就是得到a除以b的余数,本题,取模就是取余
引理:积的取余等于取余的积的取余。
打个比方5的4次方对3取余,先按正常思维计算5的4次方625,对3取模,625除3得208余1,什么是取余的积再取余呢,先用5对3取余,得2,2的4次方为16,16再对3取余,得5余1,前后两次取余的结果都是1,以此证明公式
作者做这道题总共犯了三个错误,第一个就是没有考虑到类型溢出,先用FOR循环算出a的b次方的值,再对c取余,当a和b的数过大时,数据类型就存不下了,如果使用引理,只不过减少了底数的大小,当b(指数)过大时依然会爆掉。
为了解决指数太大的问题,又用到了另一个数学知识,
2的n次方等于2的2分之n次方乘以2的2分之n次方
打个比方就是2的8次方等于2的4次方乘以2的4次方,算不明白就把式子展开,自己比较一下几个2相乘就行了
根据刚才的例子得出一种解题思路

int a , b ,c
final d = a;
if(b%2==0){
for( ; b > 0 ; b/=2 ){
  a =a*a
}}
else{
for( ; b > 1 ; b/=2 ){
  a = a*a;
}
a=a*d;
}

看不明白就自己设想几个数,走一走,数学原理都在上面了
为什么要判断b(指数)的奇偶性呢,,举个例子2的9次方,是不是等于2的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值