#define maxn 100//模方程数量
int a[maxn], r[maxn];
void Init(int k) //初始化函数,有k个等式,读入除数a和余数r
{
for (int i = 0; i < k; i++) scanf("%d", &a[i]);
for (int i = 0; i < k; i++) scanf("%d", &r[i]);
}
void ex_gcd(int a, int b, int& d, int& x, int& y)
//拓展欧几里德算法
//ax+by=gcd(a,b) ,其中d=gcd(a,b)
//通解:(x+kb',y-ka'),b'=b/d a'=a/d
{
if (!b) {
d = a; x = 1; y = 0;
}
else {
ex_gcd(b, a%b, d, y, x);
y -= x * (a / b);
}
}
int excrt(int k)//拓展中国剩余定理,共有k个模方程,返回方程组的解//x==r(mod a)
{
int A = a[0], R = r[0];
int x, y, d, b;
for (int i = 1; i < k; i++) {
ex_gcd(A, a[i], d, x, y);
if ((R - r[i]) % d) {
return -1;
}
x *= (r[i] - R) / d, b = a[i] / d, x = (x%b + b) % b;//求得最小x解
R = A * x + R, A = A / d * a[i], R %= A;//新A为a[]的lcm,新R为方程联立后的最小解
}
return (R%A + A) % A;
}