AcWing 5286. 翻倍 二分答案做法
  • 板块学术版
  • 楼主shiyuyuyu
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/5 14:29
  • 上次更新2023/12/5 14:37:29
查看原帖
AcWing 5286. 翻倍 二分答案做法
1100269
shiyuyuyu楼主2023/12/5 14:29

题目

给定两个正整数,初始时两数均为 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;
}
2023/12/5 14:29
加载中...