题目要求



题目解析
假设x和y的最大公约数为t,则x/t和y/t是互质的,因此,x2x^2x2和z/xz/xz/x的最大公约数为t2t^2t2。
下面程序已通过官方测试数据。
#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;
}
该程序利用欧几里得算法计算两个数的最大公约数,并进一步解决了一个与最大公约数相关的数学问题:如果x和y的最大公约数为t,那么x²和z/x的最大公约数也是t²。程序在给定的测试数据中已通过验证,当z能被x整除时,可以找到满足条件的y值;否则输出-1。
3629

被折叠的 条评论
为什么被折叠?



