快速幂在我大一的上学期就有听说过,但当时并没有深入去研究过快速幂,今天看博客的时候突然看到有关快速幂的有关知识,就借机学习了快速幂。
在了解之后我发现,快速幂的基本思想就是将指数看做是一个二进制的数(其实输入的任何类型的数,在计算机里存储的都是对应的二进制数,因为计算机只认识0和1,所以所有的数在计算机里存储的都是其对应的二进制数),当遇到0时,就一直累乘,当遇到1时就将累乘结果乘到最终结果里。详细说明在代码里。继续往下看。
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,sum;
sum=1;
scanf("%d%d",&a,&b);//求a的b次方
for(; b; b>>=1)//b>>=1此语句表示右移操作,输入的b假设是6的话,
//在计算机存储的是二进制数110,右移一次变成11,再右移一次变为1,
{
/*表示b&1不等于0时进行,也就是b==1时进行*/
if(b&1)
sum*=a;
a*=a;
}
printf("%d\n",sum);
return 0;
}
总结:如果按我们平时做题的话求a^b次方,你一定让他循环b次,累乘b个a,这样做一旦b比较大的话,很有可能会超时,快速幂就很好解决了这一问题。他能让循环的次数由b次变为b对应的二进制数的位数,极大减少了循环的次数,因而被称之为快速幂。