最基本的快速幂

同样是个老问题,为什么要快速幂?

显然一直for循环n次太二了啊,越到后面越蠢,轻轻松松大数据让你boom。。。。

什么是快速幂?

快速幂的原理是什么?

.......

这些问题我都不直接回答你(傲娇)

先把板子贴上来(又是我自己脑补的。。。。)

#include<cstdio>

using namespace std;

int a, n;  //  a^n

int main()
{	
	scanf("%d%d", &a, &n);
	int temp = a;
	int ans = 1;
	while(n != 0)
	{
		if(n & 1 == 1)
		{
			ans = ans * temp;
		}
		temp = temp * temp;
		n = n >> 1;
	}
	printf("%d", ans); 
} 

好,现在来瞎解释一波。。。

我们将n分成数个类似于1 2 4 8 16......的数的和

然后在进行幂

为什么要这样啊?

因为我们的目的是简化n啊

这同样也是temp这个东西很有意思的地方

因为他的平方完全吻合我们的类似于2进制的转化方式

而n & 1这个东西就用来判断这个temp到底有没有需要乘入ans了

联系一下这些零碎的idea,就可以搞了这个快速幂了

(注意位运算!!!位运算!!!位运算!!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值