同样是个老问题,为什么要快速幂?
显然一直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,就可以搞了这个快速幂了
(注意位运算!!!位运算!!!位运算!!!)