CF833A El juego sin sentido 题 解

Titulo

Slastyona y su fiel perro Pushok están jugando un juego sin sentido que de hecho es muy interesante.

El juego consta de múltiples rondas. Sus reglas son muy simples: en cada ronda, se elige un número natural kk. Entonces, el que lo dice (o ladra) más rápido que el otro gana la ronda. Después de eso, el puntaje del ganador se multiplica por \ (k ^ {2} \) , y el puntaje del perdedor se multiplica por kk. Al comienzo del juego, tanto Slastyona como Pushok tienen puntajes iguales a uno.

Desafortunadamente, Slastyona había perdido su bloc de notas donde se registraba la historia de todos los juegos. Sin embargo, logró recordar los resultados finales de cada juego, pero todos sus recuerdos de ellos son vagos. Ayude a Slastyona a verificar su corrección o, para decirlo de otra manera, para cada par de puntajes determinado determine si era posible que un juego terminara con tal resultado o no.

Slastyona y su fiel perro Pushk están jugando un juego sin sentido pero divertido. El juego incluye múltiples rondas.

Sus reglas son muy simples: primero elija un número natural \ (k \) . Entonces, quien diga (o ladre) más rápido que otro ganará una ronda. El puntaje del ganador se multiplicará por el cuadrado de k después de eso, y el puntaje del perdedor solo se puede multiplicar por k. Al comienzo del juego, Slastyona y PurSok tenían cada uno un puntaje inicial. Desafortunadamente, Slastyona perdió el bloc de notas, que registró la historia de los N juegos que jugaron. Se las arregló para recordar el resultado final de cada juego, pero sus recuerdos eran vagos. Ayude a Slastyona a verificar su corrección o, en otras palabras, para cada par de puntajes dados, determine si el juego puede lograr ese resultado.

Formato de entrada

En la primera cadena, se da el número de juegos \ (n (1 ≤ n ≤ 350000) \) .

Cada juego está representado por un par de puntajes a, \ (b (1 ≤ a, b ≤ 109) \) , los resultados de Slastyona y Pushok, correspondientemente.

Formato de salida

Para cada par de puntajes, responda "Sí" si es posible que un juego termine con un puntaje dado, y "No" de lo contrario.

Puede generar cada letra en mayúsculas o minúsculas (superior o inferior).

Entrada de muestra

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

Salida de muestra

Yes
Yes
Yes
No
No
Yes

Solución

Sean \ (a \) y \ (b \) las puntuaciones de dos juegos. Para \ (a \) y \ (b \) , cada ronda del juego no es \ (a = a \ cdot k, b = b \ cdot k ^ 2 \) , que es \ (a = a \ cdot k ^ 2, b = b \ cdot k \) , obviamente cada ronda del juego, la suma de \ (a \ cdot b \) se multiplicará por \ (k ^ 3 \) , entonces los tres últimos deben estar separados por un número entero, lo que indica que esto puede existir.

Pero tenga en cuenta que esta condición no es suficiente.

También existe la condición de que el resultado del cubo sea un factor de \ (a \) y \ (b \)

\ (\ porque ab = k ^ {3n} \)

$ \ por lo tanto \ sqrt [3] {ab} = \ sqrt [3] {k ^ {3n}} = k ^ n $

Se supone que se han jugado \ (p \) juegos, \ (a \) o \ (b \) se ha multiplicado por \ (p \) veces \ (k \) al menos , luego \ (k ^ n \) (resultado de cubo abierto) Debe ser un factor de \ (a \) y \ (b \)

Lo contrario también es cierto: cuando \ (\ sqrt [3] {ab} = k ^ n \) es un número entero y \ (k ^ n \) es un factor de \ (a \) y \ (b \) , la puntuación es Legal

Código

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        long long a, b;
        scanf("%lld%lld", &a, &b);
        long long m = pow(a * b, (1.0 / 3)) + 0.5;
        puts((m * m * m != a * b || a % m || b % m) ? "No" : "Yes");
    }
    return 0;
}

Supongo que te gusta

Origin www.cnblogs.com/youxam/p/cf833a.html
Recomendado
Clasificación