exGCD / exCRT
exgcd
求解形如
\(ax + by = k * gcd(a, b)\)
我们先来解决一个简单一些的问题
\(ax+by=1\) \((a\perp b)\)
根据exgcd,我们能求出来一组特解\(x0, y0\),接下来,我们尝试构造其通解
设 \(a(x0 + \Delta x ) + b (y0 + \Delta y) = 1\)
与\(ax0+by0=1\) \((a\perp b)\) 相减,得
\(a\Delta x + b\Delta y = 0\)
\(\Delta x = -\frac{b \Delta y} {a}\)
由于\(\Delta x\)是整数,所以 \(a \mid b \Delta y\),又因为\(a\perp b\)所以\(a \mid \Delta y\)
同理可得\(b \mid \Delta x\)
设\(\Delta x = kb\)
则有\(\Delta y =- \frac{a \Delta x }{b} = -\frac{akb}{b} = ka\)
因此,通解为
\(x = x0 + kb\)
\(y = y0 - ka\)
这意味着:
1.已经在构造中证明,该形式是方程的一个解
2.因为我们是对全体\(\Delta x, \Delta y\)推导方程的解一定满足该形式
我们均已经在上文证明
接下来,我们希望求解
\(ax + by = k * (a, b)\)
在方程两边同时除以\(k * (a, b)\)
\(a' = \frac{a}{k (a, b)}, b' = \frac{b}{k (a, b)}\)
转化为
\(a'x+b'y=1\)
通解为
\(x = x0 + kb' = x0 + k\frac{b}{(a, b)}\)
\(y = y0 - ka' = y0 - k\frac{b}{(a, b)}\)
exCRT
我们合并方程组
有
\(x = m_1k_1+r_1 = m_2k_2+r_2\)
整理
\(m_1k_1 - m_2k_2 = r_2 - r_1\)
令\(c = r_2-r_1\)
方程两边同时除以\(c\)
\(p_1k_1 - p_2k_2 = 1\)
有解仅当
通解为
\(k_1 =k_1' + lp_2\)
\(k_2 =k_2' - lp_1\)
回代,得
\(x = m_1k_1' + lm_1p_2\)
\(x = m_1k_1' + l[m1, m2]\)
\(x \equiv m_1k_1' (mod lcm(m1, m2))\)
每一步都不失唯一性和成立性