描述
快速幂,就是迅速求解
ap
a
p
mod
m
o
d
k
k
的结果,按照普通的暴力求解,需要的复杂度,当p比较大的时候,普通的p次求幂就会变得很慢,马满足不了我们的要求,而快速幂则可以再
O(lgp)
O
(
l
g
p
)
的时间内完成求解,原理如下:
ap={ap/2×ap/2,ap×a,if p is evenif p is odd
a
p
=
{
a
p
/
2
×
a
p
/
2
,
if
p
is even
a
p
×
a
,
if
p
is odd
由于整数的乘法满足乘法结合律,所以才可以用快速幂加快速度。
快速幂总共有两种形式,一种是迭代,一种是递归,既然说了要快速,那就要使用常数比较小的迭代方式,再搭配上位运算,完美的快速幂就诞生了。
code
typedef long long ll;
ll FastPower(ll a, ll p, ll k) {
ll ans = 1;
while (p) {
if (p & 1) ans = (ans * a) % k;
a = (a * a) % k;
p >>= 1;
}
return ans;
}
第五行中的if语句意思就是判定p是否为素数,右移1位相当于p/2。