Теория чисел · Остатки и периодыМультипликативный порядок · Первообразные корни
SilverTests.ruОлимпиадная математика и информатика
Периоды степеней по модулю
Почему последние цифры начинают повторяться и как найти самый длинный возможный цикл
Рассмотрим степени положительного целого числа a:
a, a2, a3, a4, ...
Если выводить не всё число, а только несколько его последних цифр, последовательность рано или поздно начинает повторяться. На первый взгляд это похоже на задачу для большого перебора. На самом деле почти всё определяется тремя понятиями теории чисел: остатком по модулю, мультипликативным порядком и первообразным корнем.
Главная идея: последние k цифр числа в системе счисления с основанием C определяются его остатком по модулю Ck.
1Последние цифры = остаток по модулю
В позиционной системе счисления число имеет вид
N = ... + d3C3 + d2C2 + d1C + d0.
Если нас интересуют только последние k цифр, все слагаемые начиная с Ck можно отбросить: они делятся на Ck. Поэтому последние k цифр полностью определяются величиной
N mod Ck.
Визуализация · что именно мы «отрезаем»
...старшие
d4C4
d3C3
d2C2
d1C1
d0C0
последние 4 цифры ⟺ остаток по модулю C4
Например, если C = 47 и выводятся последние четыре цифры, то мы изучаем не огромные числа an, а только
an mod 474.
2Что такое период
Период T — это число шагов, через которое последовательность остатков начинает повторяться в том же порядке:
an+T ≡ an (mod m).
Если a взаимно просто с m, число an можно сократить по модулю m. Тогда условие периода превращается в
aT ≡ 1 (mod m).
Минимальное положительное T, для которого это выполняется, называется мультипликативным порядком числа a по модулю m:
ordm(a) = min { T > 0 : aT ≡ 1 (mod m) }.
Интерактив · цикл степеней по модулю 7
Выберите число a. Стрелка означает умножение текущего остатка на a по модулю 7. Число 3 проходит через все шесть ненулевых остатков прежде, чем вернуться к 1.
Смысл картинки: длина замкнутого маршрута от 1 обратно к 1 и есть порядок числа. Для a = 2 по модулю 7 порядок равен 3, а для a = 3 — уже 6.
3Почему период не может быть сколь угодно большим
Если gcd(a,m) = 1, число a принадлежит группе обратимых остатков по модулю m. Количество таких остатков равно функции Эйлера φ(m).
Теорема Эйлера утверждает:
aφ(m) ≡ 1 (mod m), если gcd(a,m) = 1.
Отсюда порядок a обязательно делит φ(m):
ordm(a) | φ(m).
Следовательно,
ordm(a) ≤ φ(m).
Визуализация · длины периодов для всех a по модулю 7
Максимум равен φ(7) = 6. Его достигают a = 3 и a = 5.
4Первообразный корень: элемент с самым длинным циклом
Если для некоторого g выполняется
ordm(g) = φ(m),
то g называется первообразным корнем по модулю m.
Интуитивно
Первообразный корень — это такое число, которое при последовательном возведении в степени проходит через максимально возможное число обратимых остатков и только после этого возвращается к 1.
Например, по модулю 7:
| a |
Степени до возвращения к 1 |
Порядок |
| 2 |
1 → 2 → 4 → 1 |
3 |
| 3 |
1 → 3 → 2 → 6 → 4 → 5 → 1 |
6 |
Поскольку φ(7) = 6, число 3 является первообразным корнем по модулю 7.
Ключевой факт для задач: если p — нечётное простое число, то первообразные корни существуют по модулям p, p2, p3, ... Поэтому для модуля pk верхняя граница φ(pk) действительно достигается.
5Максимальный период для pk
Для простого p функция Эйлера от степени p имеет особенно простой вид:
φ(pk) = pk-1(p - 1).
Так как по модулю pk существует первообразный корень, максимальная длина периода равна
Tmax = pk-1(p - 1).
Тогда a = pb для некоторого целого b. Уже ak содержит множитель pk, поэтому
ak ≡ 0 (mod pk).
После этого идут только нули. Такая последовательность имеет в конце период 1 и не может дать максимальный цикл.
Пример: C = 73, последние три цифры
Модуль равен 733. Поэтому
Tmax = φ(733) = 72 · 732 = 383688.
6Как проверить, что число — первообразный корень
Пусть p — простое. Возможный максимальный порядок равен p - 1. Разложим p - 1 на простые множители и выпишем только различные простые делители q.
Число g является первообразным корнем по модулю p тогда и только тогда, когда для каждого такого q
g(p-1)/q ¬≡ 1 (mod p).
Почему достаточно проверять только простые делители
Если порядок g был бы собственным делителем числа p - 1, то число (p - 1) / ordp(g) имело бы хотя бы один простой делитель q. Тогда уже степень (p - 1) / q дала бы единицу. Поэтому проверять все делители p - 1 не нужно.
Пример: p = 73
Имеем
72 = 23 · 32.
Различные простые делители — только 2 и 3. Для g = 5 достаточно проверить две степени:
| Проверка |
Остаток |
Вывод |
| 536 mod 73 |
72 |
не 1 |
| 524 mod 73 |
8 |
не 1 |
Значит ord73(5) = 72, то есть 5 — первообразный корень по модулю 73.
Чтобы подняться от p к p2, проверяют ещё одно условие:
gp-1 ¬≡ 1 (mod p2).
Для g = 5:
572 mod 732 = 2410 ≠ 1.
Поэтому 5 остаётся первообразным корнем по модулям 732, 733, ...
7Сколько чисел дают максимальный период
Теперь пусть требуется не длина максимального периода, а количество значений a, которые дают этот период.
В циклической группе порядка N количество элементов порядка ровно N равно φ(N). Для модуля pk группа обратимых остатков имеет порядок
N = φ(pk).
Следовательно, количество первообразных корней, а значит и количество значений a с максимальным периодом, равно
φ(φ(pk)).
Пример: C = 47, последние четыре цифры
Модуль:
m = 474 = 4 879 681.
Максимальный период:
φ(474) = 46 · 473 = 4 775 858.
Разложение:
4 775 858 = 2 · 23 · 473.
Количество значений a с таким периодом:
φ(4 775 858) = 22 · 46 · 472 = 2 235 508.
4 879 681
всего a от 1 до 474
4 775 858
максимальная длина периода
2 235 508
значений a с максимальным периодом
8Программное решение
Если нужно решить задачу программно, перебирать все значения a и строить для каждого последовательность степеней невыгодно. Чисел почти 4,9 миллиона, а максимальный период сам имеет длину почти 4,8 миллиона.
Идея программы: программа повторяет аналитическое решение. Сначала вычисляет m = Ck, затем φ(m) — максимальную длину периода, а после этого φ(φ(m)) — количество значений a, для которых этот период достигается.
Функция Эйлера через факторизацию
Чтобы вычислить φ(n), достаточно разложить n на простые множители. Для каждого различного простого делителя p используется формула
φ(n) = n · ∏p|n(1 - 1/p).
def phi(n):
result = n
p = 2
while p * p <= n:
if n % p == 0:
# p — один из простых делителей n
while n % p == 0:
n //= p
result -= result // p
p += 1
# если после перебора остался простой множитель
if n > 1:
result -= result // n
return result
Решение задачи для C = 47
C = 47
k = 4
m = C ** k
# максимальный возможный период
max_period = phi(m)
# число элементов максимального порядка
answer = phi(max_period)
print(m)
print(max_period)
print(answer)
Программа выведет:
4879681
4775858
2235508
Следовательно, программно получаем тот же ответ:
2 235 508.
Проверка конкретного числа a
Если требуется не посчитать количество таких чисел, а проверить конкретное a, можно воспользоваться критерием максимального порядка. Пусть N = φ(m), а q — различные простые делители N. Тогда a имеет порядок N, если
aN/q ¬≡ 1 (mod m)
для каждого простого делителя q числа N.
def prime_divisors(n):
divisors = []
p = 2
while p * p <= n:
if n % p == 0:
divisors.append(p)
while n % p == 0:
n //= p
p += 1
if n > 1:
divisors.append(n)
return divisors
def has_max_period(a, m):
N = phi(m)
for q in prime_divisors(N):
if pow(a, N // q, m) == 1:
return False
return True
Здесь pow(a, b, m) вычисляет ab mod m быстрым возведением в степень и не создаёт огромное число ab.
Наивный способ для каждого a последовательно вычислять a, a2, a3, ... до первого повторения. В худшем случае для одного a потребуется около 4,8 миллиона шагов, а самих a почти 4,9 миллиона. Такой двойной перебор совершенно лишний: теория чисел сводит задачу к факторизации нескольких чисел и быстрому возведению в степень.
9Интерактивный калькулятор для простого основания
Введите нечётное простое основание p и число выводимых цифр k. Калькулятор покажет модуль pk, максимальный период, количество значений a с максимальным периодом и один конкретный первообразный корень.
10Схема решения задач
Шаг 1
Последние k цифр в системе с основанием p → переходим к модулю pk.
Шаг 2
Период степеней a → это ordpk(a), если p не делит a.
Шаг 3
Максимальный период → φ(pk) = pk-1(p - 1).
Шаг 4
Числа, достигающие максимума, → первообразные корни по модулю pk.
Шаг 5
Количество таких чисел → φ(φ(pk)).
Запомнить:
последние цифры → модуль;
период → мультипликативный порядок;
максимальный период → первообразный корень;
число максимальных циклов → ещё одна функция Эйлера.