标签:验证 lse pac 8 8 The names 现在 sla else
Slastyona和她的忠实狗狗普什克正在玩一个毫无意义但是很有趣的游戏。游戏包括多个回合。
它的规则非常简单:先选择一个自然数k。然后,谁说(或吠)的比另一个快就会赢得一局。胜利者的得分在那之后会乘以k的平方,而输了的人的得分就只能乘以k。比赛开始时,Slastyona和PurSok都有一个初始分数。不幸的是,Slastyona丢失了记事本,那里记录了他们玩过的N个游戏的历史。她设法回忆了每一场比赛的最终结果,但是记忆都很模糊。帮助Slastyona验证它们的正确性,或者,换句话说,对于每一对给定的分数,确定游戏是否能够完成这样的结果。
输入 #1
6
2 4
75 45
8 8
16 16
247 994
1000000000 1000000
输出 #1
Yes
Yes
Yes
No
No
Yes
? 现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k,现在给你最终这两个人的得分a,b,让你判断是否有这个可能,有可能的话Yes,否则No。
由于每次都是一个数乘k,一个数乘$k2$,那么**每次这两个数都乘$k3$**,如果可以满足条件,那么给出的个数的乘积一定是一个整数的三次方
由于c++没有开立方的函数,我们可以用pow(x, $\frac{1}{3}$)来表示x的立方根。
由于pow返回的是double类型,如果判断x的立方根是否是整数会有精度损失,所以可以将x的立方根四舍五入后再乘以它的立方判断是否等于x。
同时还需要判断x的立方根是否是a,b的因数。、
/*************************************************************************
> File Name: v.cpp
> Author: LiuGeXian
> Mail: 1019630230@qq.com
> Created Time: 2020/4/22 11:01:25
************************************************************************/
#include <bits/stdc++.h>
using namespace std;
int T;
int main(){
scanf("%d", &T);
while (T--){
long long a, b;
scanf("%lld %lld", &a, &b);
long long x = a * b;
long long y = pow(x, 1 / 3.0) + 0.5;
if (y * y * y != x || a % y || b % y) printf("No\n");
else printf("Yes\n");
}
return 0;
}
CF833A The Meaningless Game 思维
标签:验证 lse pac 8 8 The names 现在 sla else
原文地址:https://www.cnblogs.com/ghosh/p/12751134.html