最基本的快速幂

来源:互联网 发布:淘宝会员数量 编辑:程序博客网 时间:2024/06/05 16:40

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

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

什么是快速幂?

快速幂的原理是什么?

.......

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

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

#include<cstdio>using namespace std;int a, n;  //  a^nint 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,就可以搞了这个快速幂了

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

原创粉丝点击