qpow(快速幂)

  • 一个简单,常用的算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#include <cstdlib>
#include <cstring>

int ()
{
int n, a;
int ans = 1;
scanf("%d%d", &a, &n);
while(n){
if(n & 1){ //看n的二进制的最后一位是否为1
ans = ans * a;
}
a *= a;
n = n >> 1;
}
printf("%dn", ans);
return 0;
}
//例如: 7= 1 1 1 如果&1后等于1,说明有1,则ans = ans * a,如果为0,则说明不是1,则继续a = a * a
a^4 a^2 a^1