El juego sin sentido 题 解

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  ≤ 109), los resultados de Slastyona y Pushok, correspondientemente.

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).

Ejemplo

Entrada
6
2 4
75 45
8 8
16 16
247 994
1000000000 1000000
Salida
Yes
Yes
Yes
No
No
Yes
Nota

El primer juego podría haber consistido en una ronda, en la que el número 2 habría sido elegido y Pushok habría ganado.

El segundo juego necesita exactamente dos rondas para terminar con tal resultado: en el primero, Slastyona habría dicho el número 5, y en el segundo, Pushok habría ladrado el número 3.

Titulo

Ahora dos personas juegan el juego, cada una tiene el número 1 al principio, quien gane puede multiplicar

\ [k ^ 2 \]

, Multiplicado por k, y ahora le da el puntaje final de estas dos personas, le permite juzgar si puede haber estos dos puntajes, si es posible, Sí, de lo contrario No.

Ideas

Para los dos jugadores A y B, el valor inicial es 1, y suponemos que la k para cada ronda será

\ [a_1, a_2 ...... a_n \]

Los puntajes de .A y B son respectivamente

\ [x_1, x_2. \]

Entonces hasta el final

\ [x_1 * x_2 = a_1 ^ 3 * a_2 ^ 3 * ...... a_n ^ 3. \]

Obviamente, el cubo de x_1 * x_2 es ​​un entero ①.

Y la puntuación mínima:

\ [a_1 * a_2 * a_3 * ...... a_n. \]

Que está debajo de las tres raíces que se encuentran arriba

\ [x_1 * x_2. \]

Puntuación máxima:

\ [a_1 ^ 2 * a_2 ^ 2 * a_3 ^ 2 * ...... a_n ^ 2. \]

Cualquier otra puntuación es un múltiplo entero de la puntuación mínima ②.

A juzgar por ① y ②

Código

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int maxn=350000+5;
int n;
long long a,b,c;
int main(){
//	freopen("1.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%lld%lld",&a,&b);
		c=(pow(a*b,1.0/3)+0.5);
		if(a*b!=c*c*c||a%c||b%c)printf("No\n");
		else printf("Yes\n");
	}
	return 0;
} 

Supongo que te gusta

Origin www.cnblogs.com/Lour688/p/12751657.html
Recomendado
Clasificación