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;
    }
    
  • 相关阅读:
    洛谷P1071 潜伏者
    2019BJFU 网站设计(孙俏-web前端开发)实验代码-181002222
    反思——P1307 数字反转
    洛谷P1067 多项式输出
    湖南大学第十五届程序设计竞赛(重现赛)
    2019河北省大学生程序设计竞赛(重现赛)
    2019BJFU C++实验习题(完结)
    配置android source 在ubuntu中编译环境
    Android屏幕保持唤醒状态
    Android richtext
  • 原文地址:https://www.cnblogs.com/lhm-/p/12229658.html
Copyright © 2011-2022 走看看