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;