扩展中国剩余定理

Posted 033000-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扩展中国剩余定理相关的知识,希望对你有一定的参考价值。

#include<cstdio>
using namespace std;
#define ll long long
ll Left[10+5],M[10+5];
ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!b){x=1,y=0;return a;}
    ll re=exgcd(b,a%b,x,y),tmp=x;
    x=y,y=tmp-(a/b)*y;
    return re;
}
int main(){
    int n,a;
    while(scanf("%d%d",&n,&a)==2&&n){
        for(int i=0;i<n;i++){
            scanf("%I64d",&M[i]);
            Left[i]=M[i]-a;
        }
        bool ok=true;ll x,y;
        for(int i=1;i<n;i++){
            ll c=Left[i]-Left[i-1];
            ll d=exgcd(M[i-1],M[i],x,y);
            if(c%d){
                ok=false;
                break;
            }
            x*=c/d;
            ll t=M[i]/d;
            x=(x%t+t)%t;
            M[i]=M[i-1]*t;
            Left[i]=(Left[i-1]+x*M[i-1])%M[i];
        }
        if(Left[n-1]) printf("%I64d
",Left[n-1]);
        else printf("%I64d
",M[n-1]);
    }
}

 

以上是关于扩展中国剩余定理的主要内容,如果未能解决你的问题,请参考以下文章

中国剩余定理与扩展中国剩余定理

中国剩余定理&&扩展中国剩余定理

中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

欧几里得(辗转相除gcd)扩欧(exgcd)中国剩余定理(crt)扩展中国剩余定理(excrt)简要介绍

Acwing-204-表达整数的奇怪方式(扩展中国剩余定理)

中国剩余定理讲解