【面试相关】python实现快速幂取余算法详解

本文详细介绍了如何使用Python实现快速幂取余算法,通过循环求余法和快速幂求余法,优化计算大指数对指定数取模的过程,降低时间复杂度至O(logN)。并解释了在奇数次幂时为何只计算rem的原理。
摘要由CSDN通过智能技术生成

假设我们要计算 2 10 2^{10} 210 对1000取模的结果,可以很简单的得到24。但是如果要求 2 1000 2^{1000} 21000 对1000取模的结果,常规方法就行不通了,因为常规的变量无法容纳这么大的数值。为此,需要借助数学技巧求解。

循环求余法

首先引入一个好理解的取模运算公式:
( a × b ) % p = ( a % p × b % p ) % p (a \times b) \% p = (a \% p \times b \% p) \% p (a×b)%p=(a%p×b%p)%p
举个例子:
a = 9 , b = 9 ( 9 × 9 ) % 6 = ( 9 % 6 × 9 % 6 ) % 6 = ( 3 × 3 ) % 6 = 3 a=9, b=9\\ (9 \times 9) \% 6 = (9\%6 \times 9\%6)\%6 = (3 \times 3) \% 6 = 3 a=9,b=9(9×9)%6=(9%6×9%6)%6=3×3)%6=3
受上面计算过程的启发,不难得到下面的取模运算公式:
x a % p = ( ( x % p ) a ) % p x^a \% p = \left( (x \% p)^a \right) \% p xa%p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值