题目大意:
扩展中国剩余定理模板。
题解:
如果不会中国剩余定理请移步这里:
https://www.cnblogs.com/yangsongyi/p/9867057.html
这里给出模板,知识不再做多余赘述。
附上代码:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; long long ai[100001],bi[100001]; long long mul(long long x,long long y,long long mod) { long long ans=0; while(y>0) { if(y&1) ans=(ans+x)%mod; x=(x+x)%mod; y>>=1; } return ans; } long long exgcd(long long a,long long b,long long &x,long long &y) { if(b==0) { x=1; y=0; return a; } long long cnt=exgcd(b,a%b,x,y); long long idx=x; x=y; y=idx-a/b*y; return cnt; } long long excrt() { long long x=0,y=0; long long M=bi[1],ans=ai[1]; for(int i=2;i<=n;i++) { long long a=M,b=bi[i],c=((ai[i]-ans)%b+b)%b; long long gcd=exgcd(a,b,x,y),idx=b/gcd; if(c%gcd!=0) return -1; x=mul(x,c/gcd,idx); ans+=x*M; M*=idx; ans=(ans%M+M)%M; } return (ans%M+M)%M; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld%lld",&bi[i],&ai[i]); printf("%lld",excrt()); }