Resíduos quadráticos módulo um número primo
Rust
Medium
math
Tarefa «Resíduos quadráticos módulo um número primo»
Dado um número primo p (p > 2) e um número inteiro a (0 ≤ a < p). É necessário determinar se a é um resíduo quadrático módulo p, ou seja, se existe um inteiro x tal que x^2 ≡ a (mod p). Se a for um resíduo quadrático, imprima qualquer x (0 ≤ x < p). Caso contrário, imprima -1. Use o símbolo de Legendre e o algoritmo de Tonelli-Shanks ou busca exaustiva considerando as restrições.
Formato de Entrada
A primeira linha contém dois números inteiros: p (primo, 3 ≤ p ≤ 10^9) e a (0 ≤ a < p).
Formato de Saída
Imprima um número inteiro: x (0 ≤ x < p) tal que x^2 ≡ a (mod p), ou -1 se não houver solução.
Exemplos
Exemplo 1
ENTRADA
7 2
SAÍDA
4
Exemplo 2
ENTRADA
7
apple
banana
apple
cherry
banana
apple
date
SAÍDA
-1
Exemplo 3
ENTRADA
7 3
SAÍDA
-1
Exemplo 4
ENTRADA
4
aa
a
aaa
a
SAÍDA
-1
Exemplo 5
ENTRADA
13 4
SAÍDA
11
main.rs