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