不互质的中国剩余定理……
链接http://acm.hdu.edu.cn/showproblem.php?pid=3579
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;
int n,m;
int extend_gcd(int a,int b,int &x,int &y)
{
int m;
if(b==0)
{
x=1;
y=0;
return a;
}
else
{
m=extend_gcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
}
return m;
}
int main()
{
int t,i,j,a[7],b[7],a1,a2,b1,b2,c,tt,x,y;
bool flag;
j=0;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
for(i=0;i<n;i++) cin>>b[i];
a1=a[0];b1=b[0];flag=0;
for(i=1;i<n;i++)
{
if(flag) continue;
a2=a[i];b2=b[i];c=b2-b1;
int d=extend_gcd(a1,a2,x,y);
if(c%d)
{
flag=true;
continue;
}
tt=a2/d;
x=(x*c/d%tt+tt)%tt;
b1=a1*x+b1;
a1=a1/d*a2;
}
if(flag)
{
printf("Case %d: -1
",++j);
continue;
}
else
{
if(b1==0&&n>1) b1=a1;
else if(b1==0&&n==1) b1=a[0];
printf("Case %d: %d
",++j,b1);
}
}
return 0;
}