ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

中国剩余定理

2022-05-29 22:03:11  阅读:177  来源: 互联网

标签:剩余 le mm 定理 times int 中国 ll equiv


中国剩余定理

在同余方程得以解决之后,设想有一个这样的问题:

\[\begin{cases}x\equiv a_1\pmod{m_1}\\x\equiv a_2\pmod{m_2}\\\cdots\\x\equiv a_n\pmod{m_n}\end{cases} \]

\(2\le n\le 10\) , \(0\le a_i<m_i\le 10^5\) , \(1\le \prod m_i\le 10^{18}\) , 对于 \(\forall m_i\) , \(m_j(i,j\in [1,n])\) 有 \(m_i\bot m_j\) 就是两两互质

要求最小正整数解 \(x\)

例题点这里

设 \(mm=\prod\limits_{i=1}^n{m_i}\) , \(M_i(1\le i\le n)\) 表示 \(\dfrac{mm}{M_i}\)

那么就有了一个特解: \(x_0=\sum\limits_{i=1}^n{a_i\times M_i\times M_i^{-1}}\)

最小正整数解则就是 \(x_0\) 对所有 \(m_i(1\le i\le n)\) 的最小公倍数取余

因为 \(m_i(1\le i\le n)\) 两两互质,则它们的最小公倍数等于 \(m\) 。即 \(x_{min}=((x_0\bmod mm)+mm)\bmod mm\)

如何证明?

看第一个式子: \(x\equiv a_1\pmod{m_1}\)

当 \(x=\sum\limits_{i=1}^n{a_i\times M_i\times M_i^{-1}}\) 时,首先 \(x=a_1\times M_1\times M_1^{-1}+\sum\limits_{i=2}^n{a_i\times M_i\times M_i^{-1}}\)

看后面一堆 \(\sum\limits_{i=2}^n{a_i\times M_i\times M_i^{-1}}\) 中有一个 \(M_i\) 因子,且 \(i\ge 2\) ,则 \(M_i\) 中一定含 \(m_i\) 的因子,模 \(m_i\) 则一定为 \(0\) 。因此后面一堆模 \(m_i\) 一定为 \(0\) 。

再看前面一堆 \(a_1\times M_1\times M_1^{-1}\) ,此时 \(M_1\) 模 \(m_i\) 一定不为 \(0\) ,则 \(a_1\times M_1\times M_1^{-1}\equiv a_1\pmod {m_i}\)

所以满足 \(x\equiv a_1\pmod{m_1}\)

同理,对于 \(\forall a_i\) ,均满足 \(x\equiv a_i\pmod{m_i}\)

那么只需要求 \(x_0=\sum\limits_{i=1}^n{a_i\times M_i\times M_i^{-1}}\) 就好啦

CODE

const int mn=10+10;
const int mm=1e5+10;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const int fni=0xc0c0c0c0;
ll n,a[mn],m[mn],M[mn],mm;
inline void read_init(){
    n=read<ll>();mm=1;
    for(int i=1;i<=n;i++){
        m[i]=read<ll>();
        mm*=m[i];a[i]=read<ll>();
    }
}
ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!b){
        x=1;y=0;
        return a;
    }
    ll d=exgcd(b,a%b,y,x);
    y=y-(a/b)*x;
    return d;
}
int main(){
    read_init();
    ll ans=0;
    for(int i=1;i<=n;i++)
        M[i]=mm/m[i];
    for(int i=1;i<=n;i++){
        ll x,y;
        exgcd(M[i],m[i],x,y);
		x%=m[i];
		if(x<0)x+=m[i];
		ans+=a[i]*M[i]*x;
		ans%=mm;
    }
    write((ans%mm+mm)%mm,1);
    return 0;
}

标签:剩余,le,mm,定理,times,int,中国,ll,equiv
来源: https://www.cnblogs.com/ex-asbable/p/16325002.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有