假设选了五个数,分别是k1,k2,k3,k4,k5
a = k1*k2*k2*k3*k4*k4*k5
b = k1*k1*k2*k3*k3*k4*k5*k5
a*b=k1^3 * k2^3 * k3^3 * k4^3 *k5^3
a,b<=10^9,a*b<=10^18,a*b开三次根号就是10^6
在(1,10^6)内二分,找到mid^3 = a*b,并且a%mid=0,b%mid=0
#include <stdio.h>
typedef long long LL;
const LL MAXN = 1e6;
LL a,b;
bool flag;
int main()
{
int n;
LL mul;
scanf("%d",&n);
while(n--)
{
flag = true;
scanf("%I64d %I64d",&a,&b);
mul = a*b;
LL l = 1;
LL r = MAXN;
LL mid = (l+r) >> 1;
while(l <= r)
{
if(mid*mid*mid > mul)
r = mid-1;
else if(mid*mid*mid < mul)
l = mid+1;
else if(a%mid == 0 && b%mid == 0)
{
printf("Yes\n");
flag = false;
break;
}
else
break;
mid = (l+r) >> 1;
}
if(flag)
printf("No\n");
}
return 0;
}