11Разбор задачи
Задача
Петя, будучи уже опытным пользователем суперкомпьютера, решил посчитать на нём различные степени некоторого целого положительного числа a в порядке возрастания, начиная с первой. Все результаты он выводил в системе счисления с основанием C = 43, причём выводил только последние три цифры получаемых чисел, при необходимости дописывая ведущие нули. В какой-то момент Петя заметил, что вывод суперкомпьютера стал повторяться, то есть последовательность оказалась периодической.
Пока Петя ждал результата, к нему в гости зашёл Вася. Петя рассказал ему про задачу, и через несколько минут Вася назвал ответ. Петя с удивлением посмотрел на получившееся число, однако спустя полчаса вычислений на суперкомпьютере он получил свой ответ, который сошёлся с ответом Васи.
Определите, какова максимальная длина периода такой последовательности. В ответе укажите целое число.
Пример записи ответа:
171717
Аналитическое решение
1
Последние три цифры в системе счисления с основанием 43 определяются остатком по модулю
m = 433 = 79507.
Значит изучаем последовательность a
n mod 43
3.
2
Сначала рассмотрим числа a, кратные 43. Если a = 43b, то
a3 = 433b3 ≡ 0 (mod 433).
После этого все следующие остатки тоже равны 0. Такой случай имеет итоговый период длины 1 и максимума дать не может.
3
Остаются числа, не кратные 43. Поскольку 43 — простое,
gcd(a,433) = 1.
Для них предпериода нет, а длина периода равна мультипликативному порядку a по модулю 43
3.
4
По теореме Эйлера порядок делит φ(43
3). Вычислим:
φ(433) = 432(43−1) = 1849·42 = 77658.
Следовательно, никакой период среди взаимно простых оснований не может быть длиннее 77658.
5
43 — нечётное простое число. По модулю 433 существует первообразный корень, то есть число с порядком ровно φ(433). Значит верхняя граница 77658 действительно достигается.
Ответ: 77658
Программное решение
У задачи нет входных данных: C=43 и количество последних цифр k=3 заданы в условии. После аналитического вывода программа просто вычисляет найденную формулу:
p = 43
k = 3
max_period = p ** (k - 1) * (p - 1)
print(max_period)
Результат:
77658
Это не перебор степеней. Программа реализует уже доказанную формулу для максимального периода по модулю pk, где p — нечётное простое.
Дополнительная вычислительная проверка
Можно также найти конкретное основание a, которое действительно имеет порядок 77658. Пусть
N = φ(433) = 77658.
Если для каждого простого делителя q числа N выполняется
aN/q ≠ 1 (mod 433),
то порядок a равен N.
def prime_divisors(n):
result = []
d = 2
while d * d <= n:
if n % d == 0:
result.append(d)
while n % d == 0:
n //= d
d += 1
if n > 1:
result.append(n)
return result
p = 43
k = 3
m = p ** k
N = p ** (k - 1) * (p - 1)
divisors = prime_divisors(N)
for a in range(2, m):
if a % p == 0:
continue
if all(pow(a, N // q, m) != 1 for q in divisors):
print("Максимальный период:", N)
print("Пример основания a:", a)
break
Программа находит, например:
Максимальный период: 77658
Пример основания a: 3
Таким образом, вычислительная проверка подтверждает, что период 77658 не только является верхней границей, но и реально достигается.