说句实话..学的不快,但是忘是忘的快..
为什么要回顾ex_gcd呢?因为中国剩余定理要用逆元hh,所以我们要用ex_gcd求下数的逆元~
我先把ex_gcd敲一下..

#include <bits/stdc++.h>
using namespace std;
int x,y;//解这个 ai∗xi+bi∗yi=gcd(ai,bi)
void ex_gcd(int a,int b)
{
    if(b==0)
    {
        x=1,y=0;
        return;
    }
    ex_gcd(b,a%b);
    int cx=x,cy=y;
    x=cy;y=(cx-a/b*cy);
}

int main()
{
    int t,a,b;
    cin>>t;
    while(t--)
    {
        cin>>a>>b;
        ex_gcd(a,b);
        cout<<x<<' '<<y<<endl;
    }
    return 0;
}

emm,好像没啥要多解释的,还是讲下吧...就是首先找到一组符合条件的解,就是x取1,y取0.然后后面就是直接递归就好了.
知道当前这一步x,y,后面就是x=cy;y=(cx-a/b*cy);就好了~
逆元是什么?
然后下面就是讲中国剩余定理了,什么是中国剩余定理呢?emm我觉得打字太麻烦了,有意向的直接看题好吧!
https://www.acwing.com/problem/content/1300/ 大概就是这个题目的意思,给你就是说找模数和余数,让你找到x使得x取模满足条件.emm要最小..怎么做呢?
就是中国剩余定理了,中国剩余定理是什么呢?
令M=m1 *...mn.然后ti是Mi关于mi的逆元.Mi是M/mi.ai是
构造图片说明 1~n ti Mi ai.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=12;
ll x,y;
ll m[N];
ll a[N],b[N],t[N];//t数组是m数组关于a数组的逆元.
void ex_gcd(ll aa,ll bb)
{
    if(bb==0)
    {
        x=1,y=0;
        return;
    }
    ex_gcd(bb,aa%bb);
    ll cx=x,cy=y;
    x=cy,y=cx-aa/bb*cy;
}
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld",&a[i],&b[i]);
    }
    ll M=1;
    for(int i=1;i<=n;i++)
    {
        M*=a[i];
    }
    for(int i=1;i<=n;i++)
    {
        m[i]=M/a[i];
    }
    for(int i=1;i<=n;i++)
    {
        ll aa,bb;
        aa=m[i];bb=a[i];
        ex_gcd(aa,bb);
        t[i]=x;
    }
    ll res=0;
    for(int i=1;i<=n;i++)
    {
        res+=m[i]*t[i]*b[i];
    }
    cout<<(res%M+M)%M<<endl;
    return 0;
}

代码~