Квадратичные вычеты по модулю простого числа
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