Descripción del título:
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 k . 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 k . Al comienzo del juego, tanto Slastyona como Pushok tienen puntajes iguales a uno.
Desafortunadamente, Slastyona había perdido su bloc de notas donde se registró la historia de todos los n 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.
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 ≤ 10 9 ), los resultados de Slastyona y Pushok, correspondientemente.
Salida
Para cada par de puntajes, responda " Sí" si es posible que un juego termine con el puntaje dado, y " No" de lo contrario.
Puede generar cada letra en mayúsculas o minúsculas (superior o inferior).
Tema: Dados dos números, dos personas juegan el juego, el puntaje inicial es 1, el puntaje del grupo ganador se multiplica por la segunda potencia de k, y el número se multiplica por k. Pregunte si se puede dar el puntaje de las dos personas después de la ronda x. Dos números
Análisis:
Establecemos el puntaje de un lado después de una ronda del juego como * k ^ 2, y el otro lado como b * k ^ 2, luego el puntaje de ambos lados después de la ronda del juego es a * b * k ^ 3, y establecemos el puntaje del juego i-round como ki, entonces el producto de los puntajes de ambas partes después del último juego es 1 * 1 * k1 ^ 3 * k2 ^ 3 *… * kn ^ 3 = (k1 * k2 * k3… * kn) ^ 3; si el resultado es legal, dado El producto de dos números debe ser el cubo de un número determinado (es decir, k1 * k2 * k3 ... * kn), podemos encontrar este número abriendo el cubo y luego multiplicar k por un lado y k ^ 2 por un lado durante el proceso de puntuación , Entonces el resultado final debe ser divisible por k1 * k2 * k3 ... * kn;
En resumen, hay dos condiciones para que nuestro juicio sea legal:
1. Multiplica el cubo para obtener un número entero;
Los enteros obtenidos en 2.1 son todos factores de dos números.
Finalmente, el código:
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 int main () { 6 int n; 7 scanf ( " % d " , & n); 8 while (n-- ) { 9 largo largo a, b; 10 scanf ( " % lld% lld " , & a, & b); 11 long long ans = ceil (pow (a * b, 1.0 / 3 )); // 向上 取 整 12 if (ans * ans * ans == a * b && a% ans == 0 && b% ans == 0 ) // juzga si es legal 13 printf ( " Sí \ n " ); 14 más 15 printf ( " No \ n " ) ; 16 } 17 devuelve 0 ; 18 }