题目:As rich as Crassus
思路:本题的思路就是扩张中国剩余定理。
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL n, m[105], a[105], flag = 0, A;
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);
LL tmp = x;
x = y;
y = tmp - (a/b)*y;
return re;
}
void CRT()
{
LL M = 1;
A = 0;
for(int i = 1; i <= 3; i++)
{
LL x, y, d, mm;
d = exgcd(M, m[i], x, y);
mm = m[i] / d;
if((a[i]-A) % d)
{
flag = 1;
return ;
}
x = (x % mm + mm) % mm;
LL k = ((a[i]-A)/d*x%mm+mm)%mm;
LL nM = M * mm;
A = (A + k*M) % nM;
M = nM;
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
for(int i = 1; i <= 3; i++)scanf("%lld", &m[i]);
for(int i = 1; i <= 3; i++)scanf("%lld", &a[i]);
CRT();
if(flag)printf("-1\n");
else
{
if(!A)printf("0\n");
else
{
LL tmp = pow(A, 1.0/3.0);
if(tmp * tmp * tmp < A)printf("%lld\n", tmp+1);
else printf("%lld\n", tmp);
}
}
}
return 0;
}