【思维】833A

来源:互联网 发布:西安行知中学小升初 编辑:程序博客网 时间:2024/06/07 22:19

Link:http://codeforces.com/problemset/problem/833/A

#include <bits/stdc++.h>using namespace std;typedef long long LL;/*题意:两个人起始分数为1,每一轮赢的人乘k*k,输的人乘k,那么给你两个数,问这两个数没有可能是最后的结果。题解:设每次的k为k1,k2..kn,把两人的值列一下,发现(k1*k2*..kn)是共有的设为m,第一局赢的人乘k1,输的人不乘,同理其他局,那么a/m * b/m = m 时才是成立的那么要证的就是:a*b = n^3 && a%n==0 && b%n == 0。*/const double eps = 1e-6;const int Maxn = 1e5+6;const LL mod = 1e9+7;map<LL,int> mp;int main(){    for(int i = 1; i <= 1000000; i++){        LL x = (LL)i*i*i;        mp.insert(make_pair(x,i));    }    int n;    LL a,b;    scanf("%d",&n);    while(n--){        scanf("%I64d%I64d",&a,&b);        LL x = a*b;        if(mp.find(x)!=mp.end() && a%mp[x]==0 && b%mp[x]==0)            puts("Yes");        else            puts("No");    }    return 0;}