【纯水题】CF 833A The Meaningless Game

题目大意

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

输入格式

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

数据范围

\(1\le n\le 350000,1\le a,b\le 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^3\cdots\)
则把\(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;
}
posted @ 2020-04-21 11:24  Midoria7  阅读(111)  评论(0编辑  收藏  举报