大致描述
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。
因为易于理解,所以不多做阐述。
易证:
1. $(a+b)%m == (a%m+b%m)%m$
代码一
int PowerMod(int a, int b, int c)//快速幂取余a^b%c
{
int ans = 1;
a = a % c;
while(b>0)
{
if(b % 2 = = 1)
ans = (ans * a) %
b = b/2;
a = (a * a) % c;
}
return ans;
}
当然,还有更好的
代码二【位运算】(详情见之后的专题)
long long qmi(long long a,long long b,long long c)
{
long long ans=1;
while(b)
{
if(b&1)
ans=ans*a%c;
a=a*a%c;
b>>=1;
}
return ans;
}
题目练习
给你三个整数 $a,b,p$,求 $a^b \bmod p$。
输入只有一行三个整数,分别代表 $a,b,p$。
输出一行一个字符串 a^b mod p=s
,其中 $a,b,p$ 分别为题目给定的值, $s$ 为运算结果。
输入 #1
2 10 9
输出 #1
2^10 mod 9=7