其他分享
首页 > 其他分享> > 中国剩余定理

中国剩余定理

作者:互联网

中国剩余定理

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

\[\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