<div>二次剩余模素数</div>
Rust
Medium
math
任务 «<div>二次剩余模素数</div>»
给定一个素数 p (p > 2) 和一个整数 a (0 ≤ a < p)。需要判断 a 是否为模 p 的二次剩余,即是否存在整数 x,使得 x^2 ≡ a (mod p)。如果 a 是二次剩余,则输出任意一个这样的 x (0 ≤ x < p)。如果不是,则输出 -1。请使用勒让德符号和 Tonelli-Shanks 算法,或在限制条件下使用枚举法。
输入格式
第一行包含两个整数: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