• 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
    我们合并方程组

    \[ \begin{cases} & {x \equiv r_{1} \text {mod} m_{1} } \\ & {x \equiv r_{2} \text {mod} m_{2} } \\ \end{cases} \]


    \(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))\)
    每一步都不失唯一性和成立性

  • 相关阅读:
    批量修改数据库表前缀
    form表单reset重置按钮
    thinkphp禁止模版标签解析
    form 转json,将form表单中的数据序列化数组后转换为Json
    MIME对应表
    zend studio 12汉化和破解
    hadoop一键安装伪分布式
    简明shell入门
    java中readLine()方法为什么有的行读不到?
    using 40 logical processors based on SQL Server licensing SqlServer CPU核心数限制问题
  • 原文地址:https://www.cnblogs.com/cdsidi/p/16584849.html
Copyright © 2020-2023  润新知