Résidus quadratiques modulo un nombre premier

Rust Medium math

Tâche «Résidus quadratiques modulo un nombre premier»

Soient un nombre premier p (p > 2) et un entier a (0 ≤ a < p). Il faut déterminer si a est un résidu quadratique modulo p, c’est-à-dire s’il existe un entier x tel que x^2 ≡ a (mod p). Si a est un résidu quadratique, affichez un tel x (0 ≤ x < p). Sinon, affichez -1. Utilisez le symbole de Legendre et l’algorithme de Tonelli-Shanks ou une recherche exhaustive en tenant compte des contraintes.

Format d\ entrée

La première ligne contient deux entiers : p (premier, 3 ≤ p ≤ 10^9) et a (0 ≤ a < p).

Format de sortie

Affichez un seul entier : x (0 ≤ x < p) tel que x^2 ≡ a (mod p), ou -1 s’il n’y a pas de solution.

Exemples

Exemple 1

ENTRÉE
7 2
SORTIE
4

Exemple 2

ENTRÉE
7 apple banana apple cherry banana apple date
SORTIE
-1

Exemple 3

ENTRÉE
7 3
SORTIE
-1

Exemple 4

ENTRÉE
4 aa a aaa a
SORTIE
-1

Exemple 5

ENTRÉE
13 4
SORTIE
11
main.rs