原理: \(7\)用二进制表示为\(1011,8+0+2+1\) \(2^11 = 2^1\times 2^2\times 2^8\)
int base = a, ans = 1; while(b){ if(b & 1) ans = (ans *1ll* base) %p; base = (base *1ll* base) %p; b >>= 1; }