AcWing 204:表达整数的奇怪方式 ← 扩展中国剩余定理

【题目来源】
https://www.acwing.com/problem/content/206/

【题目描述】
给定 2n 个整数 a1,a2,…,an 和 m1,m2,…,mn,求一个最小的非负整数 x,满足 ∀i∈[1,n],x≡mi(mod ai)。

AcWing 204:表达整数的奇怪方式 ← 扩展中国剩余定理_第1张图片

【输入格式】
第 1 行包含整数 n。
第 2 … n+1 行:第 i+1 行包含两个整数 ai 和 mi,数之间用空格隔开。

【输出格式】
输出最小非负整数 x,如果 x 不存在,则输出 −1。

【输入样例】
2
8 7
11 9

【输出样例】
31

【数据范围】
1≤ai≤
2^31−1
0≤mi 1≤n≤25
所有 mi 的最小公倍数在 64 位有符号整数范围内。

【算法分析】
● 扩展中国剩余定理(Extended Chinese Remainder Theorem,ExCRT)是中国剩余定理(Chinese Remainder Theorem,CRT)的推广形式,用于求解
模数不互质的线性同余方程组。当然,扩展中国剩余定理也能用于求解模数互质的线性同余方程组

● 扩展中国剩余定理的核心操作是‌合并同余方程‌。具体而言,是通过逐步合并两个同余方程,最终将整个同余方程组合并为一个同余方程。

● 扩展中国剩余定理求解示例
(1)合并前两个同余方程
方程1:x≡2(mod 4),通解为
x=2+4k(k为整数)。
方程2:x≡2(mod 6),将方程 1 通解代入得 2+4k≡2(mod 6)。
化简得 4k≡0(mod 6) → 2k≡0(mod 3)  (约去 gcd(4,6)=2)。
因 gcd(2,3)|0,故有解。求得 k≡0(mod 3),即 k=0+3t=3t(t为整数)。
更新 x=2+4k=2+4×3t=2+12t,即 x≡2(mod 12)。
(2)合并第三个方程
当前解:
x=2+12t
方程3:x≡5(mod 9),将 x=2+12t 代入得 2+12t≡5(mod 9)
化简得:12t≡3(mod 9) → 4t≡1(mod 3) (约去 gcd(12,9)=3)。
因 gcd(4,3)|1,故有解。求得 t≡1(mod 3),即 t=1+3v(v为整数)。
更新 x=2+12t=2+12×(1+3v)=
14+36v,即 x=14(mod 36)。

【算法代码】

#include 
using namespace std;

typedef long long LL;
bool flag=true;
LL a1,b1;
int n;

LL exgcd(LL a,LL b,LL &x,LL &y) {
    if(b==0) {
        x=1,y=0;
        return a;
    }
    LL d=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return d;
}

int main() {
    cin>>n;
    cin>>a1>>b1;
    while(--n) {
        LL a2,b2;
        cin>>a2>>b2;
        LL k1,k2;
        LL d=exgcd(a1,a2,k1,k2);
        if((b2-b1)%d) {
            flag=false;
            break;
        }

        k1*=(b2-b1)/d;
        LL T=a2/d;
        k1=(k1%T+T)%T;
        b1=a1*k1+b1;
        a1=abs(a1/d*a2); //LCM
    }

    if(flag) cout<<(b1%a1+a1)%a1;
    else cout<<"-1";

    return 0;
}

/*
in:
3
11 6
25 9
33 17

out:
809
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/147690710
https://blog.csdn.net/hnjzsyjyj/article/details/147709522
https://blog.csdn.net/hnjzsyjyj/article/details/147673627
https://blog.csdn.net/hnjzsyjyj/article/details/147805062
https://zhuanlan.zhihu.com/p/612353366
https://blog.csdn.net/weixin_72060925/article/details/128461681
https://blog.csdn.net/SHU15121856/article/details/147198177
https://www.nowcoder.com/discuss/353148218311647232

你可能感兴趣的:(信息学竞赛,#,算法数学基础,扩展中国剩余定理)