第一周任务总结(快速幂)

**

快速幂算法总结

快速幂算法的概念

  • 快速幂就是做到让程序快速求幂,减少时间复杂度,使程序更快运行

快速幂的时间复杂度

  • 若题目为求a^n的值,那此时程序的时间复杂度为O(n),但如果使用快速幂,便可以将时间复杂度减少到O(log(n))

快速幂算法的代码

int qpow(int a,int b)//首先输入两个值,表示所要运算的a^b
{
	int ans=1;   //对结果赋初值,防止之后程序运行时出错 
	while(b)  //当b!=0时运行程序 
	{
		if(b&1)  //判断此时是否需要相乘 
			ans=ans*a;
		b>>=1; 	 //让b右移一位 
		a=a*a; 	 //不断更新a的次方数
	 		//每运行一次,a的次方数加 1 
	}
	return ans;	//得到结果
}	
  • 首先输入两个值a,b(a^b),并对ans赋初值为1
  • 开始运算,在b!=0的时候,进入循环
  • 判断b的二进制数的末尾为0或是1,若为0则不相乘,为1则进行相乘
  • b的值不断更新,每次右移一位(除以2)
  • a的值不断更新,每更新一次次方数加一次
  • 当b=0时,说明对b的分解完成,退出循环

好像有点难以理解 ,再来举个栗子

例如求2的100次方
如果不用快速幂的话,程序循环与相乘都需要运行100次,但快速幂只需要循环七次,相乘三次
首先输入a(2),b(100),开始运算,此时b(100)!=0,进入循环
b&1这里好像需要说明一下
运用了按位与运算符(&)100的二进制数为1100100,当二进制末尾位置上为0时不进行运算,当二进制末尾位置上为1时进行运算(这就是为什么每次循环都要让b右移一位了,因为要二进制的每一位究竟是0还是1)
但为什么为0时相乘,为1时不乘呢?
因为快速幂是指将所求的次方数分解
例如100的二进制数为1100100,那就说明100可以由4+32+64构成,2的100次方就可以计算为 2100 = 2(4+32+64) = 24 *232 * 264

这样计算就可以大大减少循环与相乘运算的次数了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值