对快速幂的理解

快速幂在我大一的上学期就有听说过,但当时并没有深入去研究过快速幂,今天看博客的时候突然看到有关快速幂的有关知识,就借机学习了快速幂。
在了解之后我发现,快速幂的基本思想就是将指数看做是一个二进制的数(其实输入的任何类型的数,在计算机里存储的都是对应的二进制数,因为计算机只认识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对应的二进制数的位数,极大减少了循环的次数,因而被称之为快速幂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值