コードフォース833意味のないゲーム(思考、数学)

コードフォース833意味のないゲーム

件名

2人がゲームをプレイしていて、各ラウンドは自然数kを与え、勝者はk ^ 2を乗算し、敗者はkを乗算し、最後の2人のスコアを与え、2人がこのスコアに到達できるかどうか尋ねます

長い英語のタイトルを吐き出さなければならないのですが、1文しか翻訳されません...

解決

また、
積が2の因数であるかどうかを判断するために積が立方体であると考えるのも良い方法です。
もしそうであれば、それは明らかに真実ではありません。そうで
なければはいです。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define int long long
using namespace std;

inline int read(){
    int x = 0, w = 1;
    char ch = getchar();
    for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
    for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    return x * w;
}

signed main(){
    int n = read();
    while(n--){
        int a = read(), b = read();
        int tmp = a * b;
        // int awsl = pow(tmp, (1.0 / 3)) + 0.5;
        int awsl = cbrt((double)a*(double)b);//在网上找到了这个开三次方的函数,啧啧
        if(awsl * awsl * awsl != tmp || a % awsl || b % awsl) cout << "No" << endl;
        else cout << "Yes" << endl;
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/rui-4825/p/12743737.html