codevs3990
中国剩余定理(孙子定理)模板
在《初等数论》上有详细的解析
这是关于模数两两互质的情况
#include<algorithm> #include<iostream> #include<cmath> #include<cstdio> using namespace std; #define LL long long LL k,l,r,n,M,x,y,Min,ans,m[15],c[15]; void exgcd(LL a,LL b,LL &x,LL &y){ if(!b){x=1;y=0;}else exgcd(b,a%b,y,x),y-=(a/b)*x; } int main(){ scanf("%lld%lld%lld",&k,&l,&r); M=1LL; for(int i=1;i<=k;i++){ scanf("%lld%lld",&m[i],&c[i]); M*=m[i]; } for(int i=1;i<=k;i++){ LL a=M/m[i],b=m[i]; exgcd(a,b,x,y); x=(x%b+b)%b; n+=c[i]*a*x; n%=M; } n%=M; if(r>=n)ans=(r-n)/M+1; if(l>=n)ans=ans-((l-n)/M+1); if((l-n)%M==0)++ans; if(ans){ if(l<=n)Min=n; else Min=n+((l-n)/M+1)*M; } printf("%lld\n%lld\n",ans,Min); }