【纯水题】CF 833A The Meaningless Game

题目大意

洛谷链接
现在两个人做游戏,每个人刚开始都是数字(1),谁赢了就能乘以(k^2),输的乘以(k),现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话输出Yes,否则输出No

输入格式

第一行是数据组数(n)
接下来(n)行每行给出两个数(a)(b),表示两个人的最终得分。

数据范围

(1le nle 350000,1le a,ble 10^9)

输出格式

输出(n)行分别为各组的结果。

样例输入

6
2 4
75 45
8 8
16 16
247 994
1000000000 1000000

样例输出

Yes
Yes
Yes
No
No
Yes

思路

无论每轮谁赢谁输,结果乘起来之后一定能整除(k^3)
经过一定轮数后,得到(a、b),则(a、b)一定满足:
(a×b=k_1^3+k_2^3+k_3^3cdots)
则把(a)(b)相乘后开立方即可。

代码

#include<bits/stdc++.h>

int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		int k=cbrt((double)a*(double)b);//cbrt是cmath库里的开立方函数
		int x=a/k,y=b/k;
		if(x*x*y==a&&y*y*x==b)puts("Yes");
		else puts("No");//实测puts比printf要快一点,不过在本题也没啥区别
	}
	return 0;
}
原文地址:https://www.cnblogs.com/Midoria7/p/12743299.html