• 【学习笔记】同余


    CRT

    求满足关于 (x) 的方程组 (egin{cases}xequiv a_1~(mod~m_1)\xequiv a_2~(mod ~m_2)\...\xequiv a_n~(mod~m_n)end{cases}) 的最小非负解,其中 (m_i) 两两互质。

    (M=prodlimits_{i=1}^n m_i)(M_i=dfrac{M}{m_i})。用扩欧求出 (t_i) 满足 (M_it_iequiv1(mod~m_i)),答案为 (sumlimits_{i=1}^nM_it_ia_i)

    证明:

    对于第 (i) 个方程,因为 (M_it_iequiv1(mod~m_i)),所以 (M_it_ia_iequiv a_i(mod~m_i))。显然 (m_imid M_j~(i eq j)),所以 (ans-M_it_ia_iequivsumlimits_{j=1}^nM_jt_ja_j(i eq j)equiv0~(mod~m_i))。所以 (ansequiv a_i~(mod~m_i))(把两个式子加起来)。

    exCRT

    求满足关于 (x) 的方程组 (egin{cases}xequiv a_1~(mod~m_1)\xequiv a_2~(mod ~m_2)\...\xequiv a_n~(mod~m_n)end{cases}) 的最小非负解,其中 (m_i) 不一定两两互质,方程组不一定有解。

    假设我们已经求出前 (i-1) 个方程的解 (ans),现需求 (ans') 满足前 (i) 个方程。令 (M=operatorname{lcm}(m_j)(j<i))

    如果把 (ans) 加上 (M),显然它仍然满足前 (i-1) 个方程组。那么就考虑一直加 (M) 直到满足第 (i) 个方程,即求出一个数 (t) 满足 (ans+tMequiv a_i~(mod~m_i)),我们要的 (ans') 就等于 (ans+tM)

    至于如何求 (t),首先把式子转换为 (tMequiv a_i-ans~(mod~m_i))。由扩欧基础知识可以知道它有解仅当 (gcd(M,m_i)mid a_i-ans),若此方程无解则整个方程组无解。

    若有解,就可以用扩欧求出 (t'Mequivgcd(M,m_i)~(mod~m_i))。两边同时乘上 (dfrac{a_i-ans}{gcd(M,m_i)}) 就得到了原式的解 (t=t' imesdfrac{a_i-ans}{gcd(M,m_i)})

    于是就得到了前 (i) 个方程的解,同时更新一下 (M)

    BSGS

    求满足 (a^bequiv c~(mod~p)) 的最小自然数 (b)(a,p) 互质。

    (m=sqrt p)。由欧拉定理可知 (a^xequiv a^{xmod~p}~(mod~p)),所以方程若有解,则解一定小于 (p)

    那么就可以把 (a^bequiv c~(mod~p)) 表示成 (a^{km-l}~(k,lle m)), 所以 (a^{km}~equiv c imes a^l~(mod~p))。开一个 map,把所有 (a^{km}) 插入。然后枚举 (l) 看看是否有满足的 (k) 即可。第一个找到的不一定是答案,要对所有可能的答案取最小值。

    当然也可以把所有 (c imes a^l~(l<m)) 插入 map,从小到大枚举所有 (k) 在 map 中找是否有满足的 (l),第一个找到的就是答案。但要判一下是不是非负数。

    exBSGS

    求满足 (a^bequiv c~(mod~p)) 的自然数 (b)(a,p) 不一定互质。

    (g=gcd(a,p))。如果 (gmid c),原式可变成 (dfrac{a}{g} imes a^{b-1}equiv dfrac{c}{g}~(mod dfrac{p}{g}))。用 (A,C,P) 记录下这三个数,就是 (Aa^{b-1}equiv C~(mod~P))

    这样一直做下去直到 (a)(P) 互质(记录一下执行次数 (k)),可以得到 (Aa^{b-k}equiv C~(mod~P))。可以用 BSGS 求得 (b-k),加上 (k) 就是答案。如果 BSGS 求得无解,说明原式也无解。

    如果在任意时刻 (g mid c),方程 (Axequiv C~(mod~p)) 一定无解,(Aa^bequiv C~(mod~p)) 也一定无解。

    如果在任意时刻 (A=C),当前方程最小自然数解为 (0),直接输出当前执行次数即可。

  • 相关阅读:
    HDU4385Moving Bricks【状压DP】
    用位运算实现加减法
    hdu 1874(最短路 Dilkstra +优先队列优化+spfa)
    codeforces 782B The Meeting Place Cannot Be Changed+hdu 4355+hdu 2438 (三分)
    hdu 1542(线段树+扫描线 求矩形相交面积)
    hdu 2602(经典01背包)
    hdu 1698(线段树区间更新)
    hdu 1754(单点更新 ,区间最大值)
    NYOJ 寻找最大数
    hdu 2222(AC自动机模版题)
  • 原文地址:https://www.cnblogs.com/creating-2007/p/14580862.html
Copyright © 2020-2023  润新知