MOD = 1_000_000_007
1.加
(a + b) % MOD
2.减
(a - b + MOD) % MOD
3.把任意整数 a 取模到 [0,MOD-1] 中,无论 a 是正是负
(a % MOD + MOD) % MOD
4. 乘(注意使用 64 位整数)
a * b % MOD
5. 多个数相乘,要步步取模,防止溢出
a * b % MOD * c % MOD
6. 除(MOD 是质数且 b 不是 MOD 的倍数)
a * qpow(b, MOD - 2, MOD) % MOD
qpow()为快速幂,代码如下:
class Solution {
public double myPow(double x, int N) {
double ans = 1;
long n = N;
if (n < 0) { // x^-n = (1/x)^n
n = -n;
x = 1 / x;
}
while (n != 0) { // 从低到高枚举 n 的每个比特位
if ((n & 1) == 1) { // 这个比特位是 1
ans *= x; // 把 x 乘到 ans 中
}
x *= x; // x 自身平方
n >>= 1; // 继续枚举下一个比特位
}
return ans;
}
}