快速幂取余算法

快速幂取余算法用于高效计算大整数的幂并取模。该算法通过每次取模避免溢出,并利用指数的二进制分解减少运算次数。在循环和递归两种实现方式下,能有效解决大整数计算和时间效率问题,适用于处理指数超过10^8的情况。
摘要由CSDN通过智能技术生成

问题
题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型

这个题目如果按照一般的循环来做的话,就会出现以下的两个问题:
1. 即使整数用 long long 也会溢出。
2. 当p(幂)的大小超过10^8,程序就不能在一秒钟之内运行出结果。

要解决第一个问题,就需要在每进行一次乘法运算时就取一次模,因为:

a*b%c = (a%c)*(b*c)%c

要解决第二个问题,就需要用到快速幂运算:

例如 a^b
先把b转换成二进制数
该二进制数第i位的权为  2^(i-1)

举个例子

11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将 a^11 转化为算 a^(2^3+2^1+2^0)  

因此就将本来是 b 次的循环转化为 log2(b)次。

代码如下:
1. 循环实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值