Residuos cuadráticos módulo un número primo
Rust
Medium
math
Tarea «Residuos cuadráticos módulo un número primo»
Dado un número primo p (p > 2) y un entero a (0 ≤ a < p). Es necesario determinar si a es un residuo cuadrático módulo p, es decir, si existe un entero x tal que x^2 ≡ a (mod p). Si a es un residuo cuadrático, imprima cualquier x tal que (0 ≤ x < p). Si no, imprima -1. Utilice el símbolo de Legendre y el algoritmo de Tonelli-Shanks o una búsqueda exhaustiva teniendo en cuenta las restricciones.
Formato de entrada
La primera línea contiene dos enteros: p (primo, 3 ≤ p ≤ 10^9) y a (0 ≤ a < p).
Formato de salida
Imprima un entero: x (0 ≤ x < p) tal que x^2 ≡ a (mod p), o -1 si no hay solución.
Ejemplos
Ejemplo 1
ENTRADA
7 2
SALIDA
4
Ejemplo 2
ENTRADA
7
apple
banana
apple
cherry
banana
apple
date
SALIDA
-1
Ejemplo 3
ENTRADA
7 3
SALIDA
-1
Ejemplo 4
ENTRADA
4
aa
a
aaa
a
SALIDA
-1
Ejemplo 5
ENTRADA
13 4
SALIDA
11
main.rs