题意:
一个游戏,一开始给两个1,每一轮其中任意一个乘以k,另一个乘以 k^2,最后得到两个数 a,b;若a,b是满足游戏条件的数则输出Yes,否则输出 No
思路:
1、a * b 开立方 可以得到 每一次操作的k的乘积 c
2、aa = a / c 得到 a 乘了 两次的 k 的乘积,显然 b 只乘了一次 aa
bb = b / c 得到 b 乘了 两次的 k 的乘积,显然 a 只乘了一次 bb
3、则 应有 aa * aa * bb == a 与 bb * bb * aa == b
#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define N 1000005
#define M 105
#define INF 0x3f3f3f3f
#define mod 1000000007
#define eps 1e-8
int main()
{
int n;
scanf("%d",&n);
while(n--){
LL a,b;
scanf("%lld%lld",&a,&b);
LL c = cbrt(a*b);
LL aa = a / c;
LL bb = b / c;
if(aa * aa * bb == a && bb * bb * aa == b){
puts("Yes");
}else puts("No");
}
return 0;
}