快速幂
快速求幂,防止爆炸
----- 将n转化为二进制
- a^n % p
ll poww(ll a, ll n, ll p) {
ll ans = 1;
while (n) {
if (n & 1) ans = ans * a % p;//若不取模就去掉p
a = a * a % p;
n >>= 1;
}
return ans;
}
慢速乘
- 对很大的数取模时,这时计算机的long long进行乘法就会爆掉
- 将a 或 b 转化为二进制
- a*b % p
ll mul(ll a, ll b, ll p) {
ll ans = 0;
while (b) {
if (b & 1) ans += a, ans %= p;
a *= 2, a %= p;
b >>= 1;
}
return ans;
}