#include <stdio.h>
#include <stdlib.h>
typedef long long ll;
ll fast(ll a, ll b)
{
int ans = 1;
while(b != 0)
{
if(b & 1)
{
ans *= a;
}
a = a * a;
b >>= 1;
}
return ans;
}
int main()
{
ll a, b, c;
scanf("%lld%lld", &a, &b);
c = fast(a, b);
printf("%lld", c);
return 0;
}
例如5^90如果用for循环要循环90次。而快速幂只需要4次;
90 的二进制数是 1011010. 5^90 = 5^(2 + 8 + 16 + 64) = 5^2 * 5^8 * 5^16 * 5^64;
很容易看出来当二进制数上为1时进行幂运算,而0不进行。所以每次用 90 & 1来判断当前数位上的数是否为1,之后 >>= 90 的二进制去掉最后一位;