整除、gcd与lcm
算术基本定理:
n的质因数分解唯一;
即n = p1e1 · p2e2 · p3e3 ··· pkek (pi默认升序 && pi默认为素数);
记π(n)为小于等于n的素数个数,则有lim n→∞时,π(n) / n·ln n = 1;
从2开始,第n个素数是nlog n级别的;
∑ 1 / i = O(log n);
∑ 1 / p = O(log log n)(更小的复杂度)(在埃氏筛中用到);
整除的性质:
若 a | c && b | c && (a, b) = 1(即a, b互质)—— 则 ab | c;
若 a | c && b | c && (a, b) = 1 —— 则 [a, b] | c;(注:[a, b] = ab / (a, b),分别代表lcm和gcd)
若 a | bc && (a, b) = 1 —— 则 a | c(a的因子不在b,那么一定在c);
若 p | ab —— 则 p | a 或 p | b;
gcd & lcm:
欧几里得算法(辗转相除):
(a, b) = (a - b, b) = (a % b, b);
每次一定有一个数减半;
一般对于n个数字一起做gcd,欧几里得的时间复杂度大约是O(n + log (max ai))的;
(a, b) = π pimin(ai, bi)
[a, b] = π pimax(ai, bi)
(a, b) [a, b] = a · b
高精度欧几里得:
a奇b奇:(a, b) = (a - b, b);
a偶b奇:(a, b) = (a / 2, b);
a偶b偶:(a, b) = 2 · (a / 2, b / 2);
[a, b] = ( a / (a, b) ) * b(防止爆int);
扩展欧几里得:
a % b = a - ceil(a / b) · b;
由归纳法知,假设存在u', v' s.t. u'b + v'(a % b) = d,
即u'b + v'(a - ceil(a / b) · b) = d v'a + (u' - ceil(a / b)) · b = d,
可知(a, b)的解
裴蜀定理:
对于任意整数a, b, d, (a, b) | d
存在整数u, v s.t. ua + vb = d;