小技巧
向上取整
(m + (n - 1)) / n;
相当于
int i=m/n;
if(m%n!=0){
i++;
}
1 累加到 n
因为S=1+2+3+...+n,并且,S=n+(n-1)+(n-2)+...+1,把这两个等式左右分别相加可以得到:2S=(n+1)+(n+1)+(n+1)+...+(n+1),其中等式右边一共是n个(n+1)相加是很容易数出来的,所以得到 2S=n(n+1),于是S=n(n+1)/2
n * (n + 1) / 2
取模
MOD = 1_000_000_007
// 加
(a + b) % MOD
// 减
(a - b + MOD) % MOD
// 取模到 [0,MOD-1] 中,无论正负
(a % MOD + MOD) % MOD
// 乘
a * b % MOD
// 多个数相乘,要步步取模,防止溢出
a * b % MOD * c % MOD
// 除(MOD 是质数且 b 不是 MOD 的倍数)
a * pow(b, MOD - 2, MOD) % MOD