中国剩余定理

 

 

 

 

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long 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 -= a / b * x;
    return d;
}
int main(){
    int n;
    cin>>n;
    LL a1,m1;
    cin>>a1>>m1;
    bool no=false;
    for (int i = 1; i < n; i ++ ){
        LL a2,m2;
        cin>>a2>>m2;
        LL k1,k2;
       LL d=exgcd(a1,a2,k1,k2);
        if((m2-m1)%d){
           no=true;
           break;
        }
            LL t=a2/d;
            k1=k1*(m2-m1)/d;
            k1=(k1%t+t)%t;
            m1=a1*k1+m1;
            a1=abs(a1/d*a2);
    }
      if (no) printf("-1\n");
    else printf("%lld\n", (m1 % a1 + a1) % a1);
    return 0;
}

 
复制代码

 

posted @   艾鑫4646  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示