long long qpow(int a, int b)
{
long long c, d;
c = 1; //存a^b
d = a; //存a的倍幂
while (b > 0)
{
if (b & 1) //或 if (b % 2 == 1)
c *= d;
b = b >> 1; //或 b = b / 2
d = d * d;
}
return c;
}
这里,我们举个列子,比如,a^22
(22)10进制 == (10110)2进制
(a^22)
(a^16)*(a^6)
(a^4)*(a^2)
(a^2)*1
(10110)%2=0 c=1,d=a^2;
(1011)%2=1 c=(a^2)*1,d=a^4;
(101)%2=1 c=(a^4)*(a^2)*1,d=a^8;
(10)%2=1 c=(a^4)*(a^2)*1,d=a^16;
(1)%2=1 c=(a^16)*(a^4)*(a^2)*1;