快速乘 + 快速幂 + 取模

2019-04-13 13:14发布

& 与运算 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; }