幂就是A^B=C;
我们用快速幂的原因就是为了在比赛中做的程序能够更快的完成任务;
用简单的方法理解幂:
int main()
{
int a,b;
int i;
scanf("%d %d",&a,&b);
for(i=2;i<=b;i++)
{
a*=a;
}
printf("%d",a);
return 0;
}
但当题目给的数据特别大的时候,用for循环来一次一次的算,用的时间会很长,很容易超时,甚至结果还可能溢出,时间复杂度O(n);所以我们在数据范围很大的时候用快速幂;
关于快速幂,我们可以用取模的方式来控制数据大小,公式是(a*b)%c=((a%c)*(b%c))%c .
int pow(long long a, int b, int mod) //a的b次方 mod是模
{
long long ans = 1;
while(b > 0)
{
if(b&1)
{
ans *= a;
ans %= mod;
}
a *= a%mod;
a %= mod;
b /= 2;
}
return ans%mod;
}
int main()
{
int a,b,mod;
scanf("%d %d %d,&a,&b,&mod);
int s;
s=pow(a,b,mod);
printf("%d",s);
return 0;
}
原理比较简单,就是通过位运算来优化,将POW进行二进制表示。
2^21=2^(2^2+2^4+2^0);
还有其他的公式和方法,等我学会再添加.