zoukankan      html  css  js  c++  java
  • Mail.Ru Cup 2018 Round 2 Problem C Lucky Days

    设在第 $x$ 天二人都 lucky,则有 $DeclareMathOperator{lcm}{lcm}$
    $ x = y_a t_a + R_a $
    $ x= y_b t_ b + R_b$

    约束条件:
    $ l_a le R_a le r_a$,$l_b le R_b le r_b$
    $ y_a, y_b ge 0$

    写成同余方程组

    egin{cases}
    x equiv R_a pmod{t_a} \
    x equiv R_b pmod{t_b}
    end{cases}

    设 $x_0$ 是上述同余方程组的一个特解,则其通解可表为 $x = x_0 + klcm(t_a, t_b)$,$kinmathbb Z$ 。

    容易证明,同余方程组

    egin{cases}
    x equiv r_1 pmod{m_1} \
    x equiv r_2 pmod{m_2}
    end{cases}
    有解的充要条件是 $gcd(m_1,m_2) mid (r_1 - r2)$,此充要条件亦可写成 $r_2 = r_1 + k gcd(m_1,m_2), kinmathbb Z$,或者写成 $r_1 equiv r_2 pmod{gcd(m_1,m_2)}$ 。

    解法:二分答案。
    实现:http://codeforces.com/contest/1055/submission/45569689

    总结

    求解形如
    egin{equation}
    egin{cases}
    x equiv a_1 pmod{m_1} \
    x equiv a_2 pmod{m_2} \
    vdots \
    x equiv a_n pmod{m_n}
    end{cases} label{E:0}
    end{equation}
    的同余方程组。

    考虑两个方程构成的同余方程组
    egin{equation}
    egin{cases}
    x equiv a_1 pmod{m_1} \
    x equiv a_2 pmod{m_2}
    end{cases}label{E:1}
    end{equation}

    egin{equation}
    egin{cases}
    x = m_1 s + a_1 \
    x = m_2 t + a_2
    end{cases}label{E:2}
    end{equation}
    $s, t$ 满足方程
    egin{equation}
    m_1 s + a_1 = m_2 t + a_2 label{E:3}
    end{equation}
    根据裴蜀定理,eqref{E:3} 有解的充要条件是 $gcd(m_1,m_2)mid (a_1 - a_2)$ 。以下假设此条件成立,并令 $d = gcd(m_1,m_2)$ 。eqref{E:3} 亦可写成
    egin{equation}
    m_1 s = m_2 t + (a_2 - a_1) label{E:4}
    end{equation}
    方程 eqref{E:4} 等价于
    egin{equation}
    m_1 s equiv a_2 - a_1 pmod{m_2}label{E:5}
    end{equation}
    注意:一个不定方程等价于一个同余方程。要熟悉这两种形式的相互转化。
    方程 eqref{E:5} 又等价于
    egin{equation}
    frac{m_1}{d} s equiv frac{a_2 - a_1}{d} pmod{ frac{m_2}{d} } label{E:6}
    end{equation}
    解得
    egin{equation*}
    s equiv left(frac{m_1}{d} ight)^{-1}frac{a_2 - a_1}{d} pmod{ frac{m_2}{d} } label{E:7}
    end{equation*}
    其中 $left(frac{m_1}{d} ight)^{-1}$ 表示 $frac{m_1}{d}$ 在模 $ frac{m_2}{d} $ 下的逆元,可用扩展欧几里得算法求得。令 $ b = left(frac{m_1}{d} ight)^{-1}frac{a_2 - a_1}{d} $,有
    egin{equation}
    s = k frac{m_2}{d} + b label{E:8}
    end{equation}
    将 eqref{E:8} 代入 eqref{E:2},得
    egin{equation}
    x = k frac{m_1m_2}{d} + m_1 b + a_1 label{E:9}
    end{equation}

    egin{equation}
    x equiv m_1 b + a_1 pmod{ frac{m_1 m_2}{d}} label{E:10}
    end{equation}
    至此,我们将同余方程组 eqref{E:1} 化成了等价(同解)的同余方程 eqref{E:10} 。

    我们证明了

    若 eqref{E:1} 有解,则其在模 $lcm(m_1,m_2)$ 下有唯一解 $x_0 $。

    故可用 $x equiv x_0 pmod{lcm(m_1,m_2)}$ 取代 eqref{E:0} 中的前两个方程,不断如此操作,最后将得到 $x equiv a pmod{lcm(a_1, a_2, dots, a_m)}$,这样就得到了 eqref{E:0} 的通解,也意味着

    若 eqref{E:0} 有解,则其在模 $lcm(m_1,m_2, dots, m_n)$ 下有唯一解。

    后记

    Miskcoo 的文章 从 eqref{E:3} 的特解和通解入手证明了 eqref{E:2} 在模 $lcm(m_1,m_2)$ 下有唯一解,其思路更为简洁。

    用扩展 Euclid 算法求出 eqref{E:3} 的特解 $s',t'$,即可得到 eqref{E:2} 的特解 $x_0 = s'm_1 + a_1$,然后用 $x equiv x_0 pmod{lcm(m_1, m_2)}$ 替换 eqref{E:0} 中的前两个方程。

    Reference

    https://blog.csdn.net/qq_29980371/article/details/71053219

    http://blog.miskcoo.com/2014/09/chinese-remainder-theorem

  • 相关阅读:
    非对称加密-RSA公钥加密,私钥解密,私钥加签,公钥验签
    设置mysql数据库本地连接或外部可连接
    mysql自增长主键,删除数据后,将主键顺序重新排序
    非Service层和Controller层调用ssm框架中的方法
    DES加密算法(密文只有字符串和数字)java和android加密的结果一致(可放在url中)
    SpringBoot ajax Restful整合
    java中线程执行流程详解
    在 CSS 中直接引用 fontawesome 图标(附码表)
    C++内存管理~
    操作系统那些事儿
  • 原文地址:https://www.cnblogs.com/Patt/p/9941200.html
Copyright © 2011-2022 走看看