zoukankan      html  css  js  c++  java
  • 中国剩余定理

    中国剩余定理

    概念

    求解关于 (x) 的一元线性同余方程组:

    [egin{cases} x equiv a_1 pmod{m_1} \ xequiv a_2 pmod{m_2} \ dots \ x equiv a_n pmod{m_n}end{cases} ]

    其中 (m_1,m_2,m_3 dots m_n) 两两互质。

    解为 (x=sumlimits_{i=1}^na_ifrac{M}{m_i}t_i),其中 (M=prodlimits^n_{i=1}m_i,frac{M}{m_i}t_iequiv 1 pmod{m_i}),即 (t_i)(frac{M}{m_i}) 在模 (m_i) 意义下的逆元。

    证明

    (m_i mid M),得:

    [largeforall k ot = i, a_kfrac{M}{m_k}t_kequiv0 pmod{m_i} ]

    (frac{M}{m_i}t_iequiv1({ m mod} m_i)),得:

    [large a_ifrac{M}{m_i}t_i equiv a_i pmod{m_i} ]

    所以得证 (x=sumlimits_{i=1}^na_ifrac{M}{m_i}t_i)

    通解为 (x+k imes Mleft(k in Z ight))。注意计算 (frac{M}{m_i}t_i) 时,不要对 (m_i) 取模。

    ll crt()
    {
        ll ans=0,M=1;
        for(int i=1;i<=n;++i) M*=m[i];
        for(int i=1;i<=n;++i)
        {
            exgcd(M/m[i],m[i]);
            x=(x%m[i]+m[i])%m[i];
            ans=(ans+a[i]*M/m[i]*x)%M;
        }
        return ans;
    }
    

    扩展中国剩余定理

    概念

    求解关于 (x) 的一元线性同余方程组:

    [egin{cases} x equiv a_1 pmod{m_1} \ xequiv a_2 pmod{m_2} \ dots \ x equiv a_n pmod{m_n}end{cases} ]

    其中 (m_1,m_2,m_3 dots m_n) 不保证两两互质。

    因为不保证两两互质,所以 (frac{M}{m_i}) 在模 (m_i) 意义下不一定存在逆元,不能直接做。

    考虑为两个方程的情况:

    [egin{cases} x equiv a_1 pmod{m_1} \ xequiv a_2 pmod{m_2} \end{cases} ]

    写成不定方程的形式,得:

    [large x=a_1+m_1t_1=a_2+m_2t_2 ]

    再进行转化,得:

    [large m_1t_1-m_2t_2=a_2-a_1 ]

    由裴蜀定理得,当 (gcd(m_1,m_2) ot mid a_2-a_1) 时,方程无解。有解时可通过 (exgcd) 算出一组可行解,得原方程组的解为 (x equiv m_1t_1+a_1 pmod{ operatorname{lcm}(m_1,m_2) })

    多个方程时就两两合并即可。

    ll excrt()
    {
        ll ans=a[1],M=m[1];
        for(int i=2;i<=n;++i)
        {
            ll g=exgcd(M,m[i]),tmp=((a[i]-ans)%m[i]+m[i])%m[i];
            if(tmp%g!=0) return -1;
            ans+=mul(x,tmp/g,m[i])*M,M*=m[i]/g,ans=(ans%M+M)%M;
        }
        return ans;
    }
    
  • 相关阅读:
    Codeforces 722C. Destroying Array
    Codeforces 722D. Generating Sets
    【BZOJ】3436: 小K的农场
    数论四·扩展欧几里德
    数论三·约瑟夫问题
    数论二·Eular质数筛法
    #1287 : 数论一·Miller-Rabin质数测试
    树的维护
    可持久化线段树
    【NOIP2016】天天爱跑步
  • 原文地址:https://www.cnblogs.com/lhm-/p/12229658.html
Copyright © 2011-2022 走看看