扩展中国剩余定理
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)简要介绍