Определение и элементарные свойства
Опр. Пусть $$$p \gt 2$$$ простое число, тогда квадратичным вычетом по модулю $$$p$$$ назовём все $$$1 \le x \le p - 1$$$, такие, что уравнение $$$a^2 \equiv x \pmod{p}$$$ имеет решения и квадратичным невычетом иначе. Обратите внимание, что $$$0$$$ не является ни квадратичным вычетом, ни квадратичным невычетом.
Теорема: Квадратичных вычетов и крадратичных невычетов поровну.
ДоказательствоРассмотрим ситуацию, когда $$$x^2 \equiv y^2 \pmod{p}$$$, это равносильно тому, что $$$x^2 - y^2 \equiv 0 \pmod{p}$$$. Используем формулу разности квадратов, получим $$$(x - y) \cdot (x + y) \equiv 0 \pmod{p}$$$. Отсюда следует, что либо $$$x - y \equiv 0 \pmod{p}$$$, либо $$$x + y \equiv 0 \pmod{p}$$$, то есть либо $$$x \equiv y \pmod{p}$$$, либо $$$x \equiv -y \pmod{p}$$$.
Получается, что все числа разбиваются на пары $$$x$$$ и $$$-x$$$, значит у каждого квадратичного вычета ровно $$$2$$$ корня, при этом каждое число является корнем какого-то квадратичного вычета $$$\implies$$$ квадратичных вычетов ровно $$$\frac{p - 1}{2}$$$ $$$\implies$$$ квадратичных невычетов $$$p - 1 - \frac{p - 1}{2} = \frac{p - 1}{2}$$$.
Теорема: Обозначим за $$$B$$$ квадратичный вычет, а за $$$H$$$ квадратичный невычет, тогда:
$$$B \cdot B = B$$$ $$$H \cdot B = H$$$ $$$H \cdot H = B$$$ Доказательство$$$B \cdot B = B$$$
Пусть $$$x$$$ и $$$y$$$ квадратичные вычеты, пусть $$$a^2 \equiv x \pmod{p}$$$ и $$$b^2 \equiv y \pmod{p}$$$. Тогда $$$(ab)^2 \equiv xy \pmod{p}$$$.
$$$H \cdot B = H$$$
Пусть $$$x$$$ квадратичный невычет, а $$$y$$$ квадратичный вычет, докажем, что $$$\frac{1}{y}$$$ тоже квадратичный вычет. Пусть $$$b^2 \equiv y \pmod{p}$$$, тогда $$$(\frac{1}{b})^2 \equiv \frac{1}{y} \pmod{p}$$$.
$$$x \cdot y \equiv z \pmod{p}$$$, предположим, что $$$z$$$ квадратичный вычет, тогда $$$x \equiv z \cdot \frac{1}{y} \pmod{p}$$$ $$$\implies$$$ $$$x$$$ квадратичный вычет, так как $$$z$$$ квадратичный вычет и $$$\frac{1}{y}$$$ квадратичный вычет. Противоречие $$$\implies$$$ $$$z$$$ квадратичный невычет.
$$$H \cdot H = B$$$
Пусть $$$x$$$ и $$$y$$$ квадратичные невычеты, $$$x \cdot y \equiv z \pmod{p}$$$ и $$$z$$$ квадратичный невычет, а $$$a_1, a_2, a_3 \cdots, a_{\frac{p - 1}{2}}$$$ все квадратичные вычеты. Рассмотрим следующий набор вычетов $$$xa_1, xa_2, xa_3, \cdots, xa_{\frac{p - 1}{2}}, xy$$$. В этом наборе все числа квадратичные невычеты, но чисел в наборе $$$\frac{p + 1}{2}$$$, а это больше чем квадратичных невычетов $$$\implies$$$ в наборе есть $$$2$$$ равных числа. Заметим, что если $$$xk \equiv xl \pmod{p}$$$ и $$$x$$$ не кратно $$$p$$$, то $$$k \equiv l \pmod{p}$$$. Значит в наборе $$$a_1, a_2, a_3 \cdots, a_{\frac{p - 1}{2}}, y$$$ есть равные числа, но в этом наборе все числа различны ($$$a_i \ne a_j$$$, так как мы взяли различные квадратичные вычеты, а $$$y \ne a_i$$$, так как $$$y$$$ квадратичный невычет, а $$$a_i$$$ квадратичный вычет). Противоречие, значит $$$z$$$ квадратичный вычет.
С помощью этих двух теорем уже можно решить 103428K - Tiny Stars.
Как проверить, число вычет или невычет?
Есть несколько способов проветь является ли число квадратичным вычетом. В этом блоге мы рассмотрим только один из них, вы можете почитать про лемму Гаусса и квадратичный закон взаимности.
Критерий Эйлера
$$$a$$$ является квадратичным вычетом по модулю $$$p$$$ тогда и только тогда, когда $$$a^{\frac{p - 1}{2}} \equiv 1 \pmod{p}$$$, и квадратичным невычетом тогда и только тогда, когда $$$a^{\frac{p - 1}{2}} \equiv -1 \pmod{p}$$$.
ДоказательствоДля начала докажем, что если $$$a$$$ не делится на $$$p$$$, то $$$a^{\frac{p - 1}{2}} \equiv \pm 1 \pmod{p}$$$. По малой теореме Ферма $$$a^{p - 1} \equiv 1 \pmod{p}$$$, выше было доказано, что любой квадратичный вычет имеет ровно $$$2$$$ корня, у $$$1$$$ это $$$1$$$ и $$$-1$$$. $$$(a^{\frac{p - 1}{2}})^2 = a^{p - 1}$$$ $$$\implies$$$ $$$a^{\frac{p - 1}{2}} \equiv \pm 1 \pmod{p}$$$.
Пусть $$$a$$$ квадратичный вычет и $$$x^2 \equiv a \pmod{p}$$$, тогда $$$a^{\frac{p - 1}{2}} \equiv 1 \pmod{p}$$$, так как $$$(x^2)^{\frac{p - 1}{2}} = x^{p - 1} \equiv 1 \pmod{p}$$$, а это верно по малой теореме Ферма.
Рассмотрим многочлен $$$x^{\frac{p - 1}{2}} - 1$$$ по модулю $$$p$$$, его степень $$$\frac{p - 1}{2}$$$ и мы уже нашли у него $$$\frac{p - 1}{2}$$$ корней $$$\implies$$$ больше корней у него нет $$$\implies$$$ если $$$b$$$ квадратичный невычет, то $$$b^{\frac{p - 1}{2}} \equiv -1 \pmod{p}$$$.
Следствие: $$$-1$$$ является квадратичным вычетом тогда и только тогда, когда $$$p = 4k + 1$$$, для какого-то натурального $$$k$$$, и квадратичным невычетом тогда и только тогда, когда $$$p = 4k + 3$$$, для какого-то натурального $$$k$$$.
Очевидно, что сложность проверки числа $$$O(\log_2p)$$$.
Кодint power(int a, int x, int mod) {
int res = 1;
while (x != 0) {
if (x % 2 == 1) {
res = 1ll * res * a % mod;
}
a = 1ll * a * a % mod;
x /= 2;
}
return res;
}
bool check(int a, int p) {
return power(a, (p - 1) / 2, p) == 1;
}
Нахождение $$$i$$$ по модулю $$$p$$$
Опр. $$$i$$$ это такое число, что $$$i^2 = -1$$$ $$$\implies$$$ $$$i$$$ по модулю $$$p$$$ назовём такое число, что $$$i ^ 2 \equiv -1 \pmod{p}$$$.
Опр. Показателем числа $$$a$$$ по модулю $$$p$$$ назовём минимальное число $$$t$$$ такое, что $$$a^t \equiv 1 \pmod{p}$$$.
Теорема: $$$a^x \equiv 1 \pmod{p}$$$ тогда и только тогда, когда $$$a$$$ не делится на $$$p$$$ и $$$x$$$ делится $$$t$$$ (показатель $$$a$$$ по модулю $$$p$$$).
ДоказательствоПусть $$$x$$$ не делится на $$$t$$$, тогда заметим, что $$$a^x \equiv a^{x - t} \pmod{p}$$$, так как $$$a^t \equiv 1 \pmod{p}$$$. Рассмотрим $$$x_1$$$, такое что $$$x_1 \lt t$$$ и $$$x \equiv x_1 \pmod{t}$$$. $$$a^{x_1} \equiv 1 \pmod{p}$$$, так как $$$a^x \equiv a^{x - t} \pmod{p}$$$. Противоречие, $$$t$$$ минимальное число, для которого $$$a^t \equiv 1 \pmod{p}$$$.
Алгоритм: Если $$$p = 4k + 3$$$ для какого-то натурального $$$k$$$, то такого $$$i$$$ не существует. Иначе рассмотрим число $$$a$$$, такое, что его показатель делится на $$$4$$$ и не делится на большие степени двойки (показатель далее будет обозначаться $$$t$$$). Так как у любого квадратичного вычета ровно $$$2$$$ корня, а у $$$1$$$ это $$$1$$$ и $$$-1$$$, то $$$a^{\frac{t}{2}} \equiv -1 \pmod{p}$$$, так как $$$t$$$ показатель, то $$$1$$$ быть не может. Значит $$$a^{\frac{t}{4}} \equiv i \pmod{p}$$$. Пусть $$$q = \frac{p - 1}{2^k}$$$, где $$$k$$$ степень вхождения $$$2$$$ в $$$p - 1$$$, тогда вместо $$$t$$$ можно использовать $$$4q$$$, так как $$$4q$$$ делится на $$$t$$$, а $$$2q$$$ нет. Осталось только найти подходящее $$$a$$$. Давайте выберем случайное $$$1 \le a \le p - 1$$$ и проверим, что $$$a^{2q} \equiv -1 \pmod{p}$$$, если это так, то $$$i \equiv a^q \pmod{p}$$$, иначе возьмём другое $$$a$$$. Ожидаемое время работы алгоритма — $$$O(\log_2p)$$$.
Доказательство асимптотики Кодmt19937_64 mt(123);
int power(int x, int a, int mod) {
int res = 1;
while (x) {
if (x % 2 == 1) {
res = 1ll * res * a % mod;
}
a = 1ll * a * a % mod;
x /= 2;
}
return res;
}
int find_i(int p) {
if (p % 4 == 3) {
return -1;
}
if (p == 2) {
return 1;
}
int q = p;
while (q % 2 == 0) {
q /= 2;
}
while (true) {
int a = mt() % (p - 1) + 1;
if (power(a, 2 * q, p) == p - 1) {
return power(a, q, p);
}
}
}