Квадратичные вычеты по модулю простого числа

Rust Средний math

Задача «Квадратичные вычеты по модулю простого числа»

Дано простое число p (p > 2) и целое число a (0 ≤ a < p). Необходимо определить, является ли a квадратичным вычетом по модулю p, то есть существует ли такое целое x, что x^2 ≡ a (mod p). Если a — квадратичный вычет, выведите любое такое x (0 ≤ x < p). Если нет, выведите -1. Используйте символ Лежандра и алгоритм Тонелли-Шенкса или перебор с учётом ограничений.

Формат ввода

Первая строка содержит два целых числа: p (простое, 3 ≤ p ≤ 10^9) и a (0 ≤ a < p).

Формат вывода

Выведите одно целое число: x (0 ≤ x < p) такое, что x^2 ≡ a (mod p), или -1, если решения нет.

Примеры

Пример 1

ВВОД
7 2
ВЫВОД
4

Пример 2

ВВОД
7 apple banana apple cherry banana apple date
ВЫВОД
-1

Пример 3

ВВОД
7 3
ВЫВОД
-1

Пример 4

ВВОД
4 aa a aaa a
ВЫВОД
-1

Пример 5

ВВОД
13 4
ВЫВОД
11
main.rs