& 与运算
9&5可写算式如下:
00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)
9&5=1
//快速乘法
int qmul_num(int a, int b) {
int ans = 0;
while(b) {
if(b & 1) ans += a;
b >>= 1;
a <<= 1;
}
return ans;
}
//快速乘法 + 取模
int qmul_mod(int a, int b, int mod) {
int ans = 0;
while(b) {
if((b %= mod) & 1) ans += a %= mod;
b >>= 1;
a <<= 1;
}
return ans % mod;
}
//快速幂
int pow_num(int a, int n) {
if(a == 0) return 0;
int ans = 1;
while(n) {
if(n & 1) ans *= a;
n >>= 1;
a *= a;
}
return ans;
}
//快速幂 + 取模
int pow_mod(int a, int n, int mod) {
if(!a) return 0;
int ans = 1;
while(n) {
if(n & 1) ans = (ans%mod) * (a%mod);
n >>= 1;
a *= a %= mod;
}
return ans % mod;
}
//快速幂 + 取模 (简化)
int pow_mod(int a, int n, int mod) {
if(!a) return 0;
int ans = 1;
while(n) {
if(n & 1) ans *= a %= mod;
n >>= 1;
a *= a;
}
return ans % mod;
}