数学
数论
0. 基本定义
离散数学一般只讨论整数。
质数是只包含 \(1\) 和自己两个因子的数,一般用 \(p\) 表示质数。
算数基本定理(唯一分解定理):
\[N=\prod p_i^{r_i}
\]
\(\gcd\) 表示两数的最大公约数。
称 \(a, b\) 两数互质,当且仅当 \(\gcd(a, b) = 1\)。
1. 欧几里得算法
\[\gcd(a,b)=\gcd(b,a \bmod b)
\]
2. 裴蜀定理
当 \(\gcd(a,b)\mid d\) 时,\(ax+by=d\) 有整数解。
3. 扩展欧几里得算法
求 \(ax+by=\gcd(a,b)\) 的通解。
根据欧几里得算法,原式等价于
\[bx+(a\bmod b)\times y=\gcd(a,b)
\]
即
\[bx+(a-\lfloor\frac{a}{b}\rfloor\times b)\times y=\gcd(a,b)
\]
化简得
\[ay+b\times(x-\lfloor \frac{a}{b}\rfloor\times y)=\gcd(a,b)
\]
递归即可求特解,时间复杂度 \(\mathcal O(\log n)\)。
代码
int exgcd(int A, int B, int &x, int &y) {
if(B == 0) {
x = 1, y = 0;
return A;
}
int d = exgcd(B, A % B, x, y), x0 = x, y0 = y;
x = y0, y = x0 - (A / B) * y0;
return d;
}
通解:
\[x_0=x+\frac{b}{\gcd(a,b)}
\]
\[y_0=y-\frac{a}{\gcd(a,b)}
\]
4. 中国剩余定理
解若干个形如 \(x\equiv a_i \pmod {b_{i}}\) 同余方程组,必须满足 \(b_i\) 两两互质。
令 \(B=\prod b_i\)。
\[x=\sum a_i\times \frac{B}{b_i}\times\bigg[\big(\frac{B}{b_i}\big)^{-1}\bigg]_{b_i}\bmod B
\]
时间复杂度 \(\mathcal{O(n\log n)}\)。
5. 扩展中国剩余定理
不需要满足两两互质,可式子合并。
把
\[x\equiv a_1 \pmod {b_1}
\]
\[x\equiv a_2 \pmod {b_2}
\]
写为
\[x=a_1+k_1b_1=a_2+k_2b_2
\]
移项得
\[k_1b_1-k_2b_2=a_2-a_1
\]
此时根据裴蜀定理,若 \(\gcd(b_1,b_2) \nmid a_2-a_1\),则无解,否则用扩欧求出 \(k_1,k_2\),得到合并后的同余式:
\[x\equiv a_1+k_1b_1 \pmod{\mathrm{lcm}(b_1,b_2)}
\]
不断两两合并即可。
时间复杂度 \(\mathcal O(n\log n)\)。
代码
int exCRT() {
int A = w[1], B = m[1];
for(int i = 2; i <= 4; i++) {
int x, y;
int d = exgcd(B, -m[i], x, y);
x = (x * ((w[i] - A) / d));
x = (x % (m[i] / d) + (m[i] / d)) % (m[i] / d);
int Lcm = lcm(B, m[i]);
A = ((A + (x * B) % Lcm) % Lcm + Lcm) % Lcm;
B = Lcm;
}
return A;
}
组合数学
0. 基本定义
待补

浙公网安备 33010602011771号