什么是快速幂?
快速幂是一个好东西。
如果你要求 是多少,对于普通的方法,是要循环 100 次。
但是对于快速幂,只要循环几次。
什么原理?
这个只要用到初中的数学知识,
如 ,
所以 ,
这样进行一次,就相当于进行了 次操作。
如何实现?
知道了原理,实现起来,就很简单了!
每次只需要进行(a 为底数,n 为指数):
while(n>1)
{
a=a*a;
n/=2;
}
但是你很快会发现,这样做是不对的。
如果 n 为奇数,那么指数就会被"吃掉"一次。
那怎么办呢?
假如 n 为奇数时,我们就拿个变量去乘一下,最后在返回 a* “变量”,代码就出来啦:
long long a,n,m=1;
cin>>a>>n;
while(n>1){
if(n%2==0){
a=a*a;
n/=2;
}
else{
m*=a;
a=a*a;
n/=2;
}
}
cout<<a*m<<endl;
看个例题:洛谷 P1226
这题怎么做呢?
用快速幂,对 ,
在过程中添加一些取模运算就 OK 了