1 条题解

  • 0
    @ 2025-10-8 16:58:26
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    void exgcd(LL a, LL b, LL &d, LL &x, LL &y) 
    {
        if(b==0)d=a, x=1, y=0;
        else
        {
            exgcd(b, a%b, d, y, x);
            y-=(a/b)*x;
        }
    }
    int main()
    {
        LL a1, b1, a2, b2, A, B, X, Y, K, d;
        int n;
        while(scanf("%d", &n)!=EOF)
        {
            bool bk = true; 
            scanf("%lld%lld", &a1, &b1);
            for(int i=2; i<=n; i++) 
            {
                scanf("%lld%lld", &a2, &b2);
                A = a1; B = a2; K = b2 - b1;
                exgcd(A, B, d, X, Y);
                if(K % d != 0) bk = false;
                LL dx = abs(B/d), dy = abs(A/d);
                X = X * (K/d);
                X = (X % dx + dx) % dx;
                b1 = a1 * X + b1;
                a1 = a1 / d * a2;
            }
            if(bk == false) printf("-1\n");
            else printf("%lld\n", b1);
        }
        return 0;
    }
    
    • 1

    *【扩展欧几里得:解同余方程组】[POJ 2891]

    信息

    ID
    1773
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    128
    已通过
    21
    上传者