题目
给定两个正整数,初始时两数均为 1
。
你可以进行任意次(也可以不进行)翻倍操作,每次操作任选一个非负整数 k
,令两数中的一个数乘以 k
,另一个数乘以 k2
。
请你计算,是否能够通过一系列操作,使得最终第一个数变为 a
,第二个数变为 b
。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n;
cin>>n;
while(n--)
{
ll a,b;
cin>>a>>b;
ll x=a*b;
ll l=1,r=1e6+10;
while(l<r){
ll mid=l+r>>1;
if(mid*mid*mid>=x) r=mid;
else l=mid+1;
}
if(l*l*l==x&&a%l==0&&b%l==0) printf("Yes\n");
else printf("No\n");
}
return 0;
}