Skip to content

小技巧

向上取整

(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