http://acm.hnu.cn/online/?action=problem&type=show&id=12831&courseid=268
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
long long extend_gcd(long long a,long long b,long long &x,long long &y)
{
if (b==0)
{
x=1;y=0;
return a;
}
else
{
int r=extend_gcd(b,a%b,y,x);
y-=x*(a/b);
return r;
}
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
long long n1,f1,d1,n2,f2,d2;
scanf("%lld%lld%lld%lld%lld%lld",&n1,&f1,&d1,&n2,&f2,&d2);
long long x0,y0;
long long xx=extend_gcd(d1,-d2,x0,y0);
if ((f2-f1)%xx)
printf("0\n");
else
{
long long k=(f2-f1)/xx;
x0*=k;
y0*=k;
long long g=abs(-d1*d2/xx);
long long p1=g/d1;
long long p2=g/d2;
if (x0-p1>=0 && y0-p2>=0)
{
long long num1=x0/p1;
long long num2=y0/p2;
long long nnn=num1<num2?num1:num2;
x0-=nnn*p1;
y0-=nnn*p2;
}
else if (x0<0 || y0<0)
{
long long num1=(x0+1)/p1;
long long num2=(y0+1)/p2;
long long nnn=num1<num2?num1:num2;
x0+=(-nnn+1)*p1;
y0+=(-nnn+1)*p2;
}
if (x0>n1-1 || y0>n2-1)
{
printf("0\n");
continue;
}
long long total1=n1-1-x0;
long long total2=n2-1-y0;
long long num1=total1/p1+1;
long long num2=total2/p2+1;
printf("%lld\n",num1<num2?num1:num2);
}
}
}