(a + b) % c = ((a % c) + (b % c)) % c
(a - b) % c = ((a % c) - (b % c)) % c
(a * b) % c = ((a % c) * (b % c)) % c
C++中的 std::__gcd(a, b)
可用于计算最大公约数
裴蜀定理:如果a和b均为整数,则有整数x和y满足ax + by = gcd(a, b)
二元线性丢番图方程定理:设a, b为整数且gcd(a, b) = d,若d不能整除c,方程没有整数解,如果能够整除,则存在无穷多个整数解
同余能够在加,减,乘和乘方中保持。
费马小定理:设n为素数,a是正整数且与n互素,则a ^ (n - 1) 与 1 模n同余
埃拉托色尼筛:输出素数,筛掉素数的倍数;欧拉筛:让每个数只被自己的最小质因数筛一次
威尔逊定理:若p为素数,则p可以整除(p - 1)! + 1
C(n, r) = C(n - 1, r) + C(n - 1, r - 1)
C(n, r) = (n!) / ( r! (n - r)! )
Lucas定理:C(n, r) 和 C(n mod m, r mod m) * C(n / m, r / m) 模m同余
Cartalan数:C(n) = ΣC(k)C(n - k), C(0) = 1
C(n) = ((4n - 2) / (n + 1)) * C(n - 1), C(0) = 1
第一类斯特林数:n个不同元素分配给k个圆排列,圆不能为空
s(n, k) = s(n - 1, k - 1) + (n - 1) * s(n - 1, k), s(0, 0) = 1, s(k, 0) = 0
第二类斯特林数:n个不同的球放在k个相同的盒子中,不能有空盒子
S(n, k) = kS(n - 1, k) + S(n - 1, k - 1), S(0, 0) = 1, S(k, 0) = 0