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;
    }
    
  • 相关阅读:
    make输出全部重定向到文件
    python selenium-webdriver 元素定位(三)
    通过vmware 启动cloudera-quickstart-vm-5.10.0-0-vmware.zip镜像无法启动。
    编写第一个python selenium-webdriver程序(二)
    sublime Text3 新建文件时定义模块
    python selenium-webdriver 环境搭建(一)
    gitlab 添加SSH Key
    python 使用 'python -m pip install --upgrade pip'提示PermissionError: [WinError 5] 拒绝访问
    bitnami gitlab 配置域名
    bitnami gitlab 安装
  • 原文地址:https://www.cnblogs.com/lhm-/p/12229658.html
Copyright © 2011-2022 走看看