题目要求
题目解析
假设x和y的最大公约数为t,则x/t和y/t是互质的,因此, x 2 x^2 x2和 z / x z/x z/x的最大公约数为 t 2 t^2 t2。
下面程序已通过官方测试数据。
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long x, long long y)
{
long long t;
while((t=x%y)!=0)
{
x=y;
y=t;
}
return y;
}
int main()
{
int n;
cin>>n;
long long z,y,x,t;
for(int i=1;i<=n;i++)
{
cin>>x>>z;
if (z%x==0)
{
t=(long long)sqrt(gcd(x*x,z/x));
y=z/x/t;
if (gcd(x,y)==t)
{
cout<<y<<endl;
}
else
{
cout<<-1<<endl;
}
}
else
{
cout<<-1<<endl;
}
}
return 0;
}