
В мире математики существует множество удивительных чисел, которые обладают уникальными свойствами. Изучение подобных математических феноменов развивает логическое мышление, открывает новые горизонты для исследований и практических применений.
В 1949 году индийский математик Даттарая Капрекар обнаружил интересную закономерность у четырёхзначных чисел. При выполнении определённых действий с четырёхзначными числами (кроме тех, в которых все цифры одинаковые) всегда получается одно и тоже число.
Суть алгоритма
1. Выбрать 4-значное число (кроме тех, в которых все цифры одинаковые, например, 5555).
2. Расположить цифры этого числа сначала в порядке убывания, затем в порядке возрастания. Получится два новых числа.
3. Вычесть из большего числа меньшее.
4. Повторять шаги 2–3 до появления неподвижной точки 6174.
Пример: число 5621
6521 – 1256 = 5265
6552 – 2556 = 3996
9963 – 3699 = 6264
6642 – 2466 = 4176
7641 – 1467 = 6174
Разность между максимальными и минимальными числами стремится к постоянной 6174.
Для тех чисел, в которых все цифры одинаковые, алгоритм не имеет смысла.
Код на Python для 4-значных чисел с пошаговым выводом процесса вычислений:
Скрытый текст
def kaprekar_constant(number):
print(f"\n{number}")
if number < 1000 or number > 9999:
print("Ошибка: число должно быть 4-значным.")
return False
if len(set(str(number))) == 1:
print("Ошибка: все цифры одинаковые.")
return False
while number != 6174:
num_str = str(number).zfill(4)
desc = int(''.join(sorted(num_str, reverse=True)))
asc = int(''.join(sorted(num_str)))
number = desc - asc
print(f"{desc} - {asc} = {number}")
print("Получена постоянная Капрекара 6174")
return True
def main():
while True:
input_number = input("\nВведите 4-значное число (кроме тех, где все цифры одинаковые) или введите '0' для завершения программы: ")
if input_number == '0':
print("Программа завершена.")
break
if not input_number.isdigit():
print("Ошибка: введите число.")
continue
kaprekar_constant(int(input_number))
if __name__ == "__main__":
main()
Уникальность числа 6174 заключается ещё и в том, что:
процесс всегда сходится к 6174 за конечное число шагов;
максимальное число итераций — 7;
после достижения числа 6174 процесс входит в цикл, потому что 7641 – 1467 = 6174;
если разделить число 6174 на сумму его цифр (6 + 1 + 7 + 4 = 18), получится 343 (6174 : 18 = 343), а это 7 в третьей степени (магия чисел!);
число раскладывается на сумму первых трёх степеней числа 18 (181 + 182 + 183 = 6174).
Для трёхзначных чисел также существует аналогичная константа — 495.
Пример: число 123
321 – 123 = 198
981 – 189 = 792
972 – 279 = 693
963 – 369 = 594
954 – 459 = 495
Код на Python для 3-значных чисел с пошаговым выводом процесса вычислений:
Скрытый текст
def constant_3digit(number):
print(f"\n{number}")
if number < 100 or number > 999:
print("Ошибка: число должно быть 3-значным.")
return False
if len(set(str(number))) == 1:
print("Ошибка: все цифры одинаковые.")
return False
while number != 495:
num_str = str(number).zfill(3)
desc = int(''.join(sorted(num_str, reverse=True)))
asc = int(''.join(sorted(num_str)))
number = desc - asc
print(f"{desc} - {asc} = {number}")
print("Получена постоянная 495")
return True
def main():
while True:
input_number = input("\nВведите 3-значное число (кроме тех, где все цифры одинаковые) или введите '0' для завершения программы: ")
if input_number == '0':
print("Программа завершена.")
break
if not input_number.isdigit():
print("Ошибка: введите 3-значное число:")
continue
constant_3digit(int(input_number))
if __name__ == "__main__":
main()
Для двухзначных чисел подобный алгоритм приводит к числу 9. Но так как нужна устойчивая точка среди двухзначных чисел, то процесс зацикливается.
Пример: число 35
53 – 35 = 18
81 – 18 = 63
63 – 36 = 27
72 – 27 = 45
54 – 45 = 9
90 – 9 = 81
81 – 18 = 63
Обнаружен цикл. Число 63 уже встречалось.
Цикл состоит из пяти чисел: 09 → 81 → 63 → 27 → 45 → 09 → ...
Для пятизначных чисел и больше алгоритм Капрекара превращается в бесконечную карусель. Разница между перестановками зацикливается без сходимости к одному числу. Из-за большого количества возможных перестановок 5-значные числа попадают в бесконечные циклы.
Практическое применение
Для постоянной Капрекара возможны интересные практические применения.
Развитие логики и алгоритмического мышления. Процедура Капрекара — отличный пример для изучения циклов в программировании (например, написание кода для проверки сходимости числа к константе).
Итерации процедуры можно использовать как простой алгоритм «перемешивания» цифр (хотя и нестойкий ко взлому).
Генерация уникальных последовательностей. Например, цикл 63 → 27 → 45 → 09 → 81 → 63 можно использовать для создания простой «маскировки» данных.
Математические квесты (например, «за сколько шагов 4-значное число превратится в 6174»), мобильные приложения-головоломки типа числовых трансформеров, чат-боты с математическими задачами.
Алгоритм можно использовать в юнит-тестах, чтобы проверить: правильность сортировки цифр (asc и desc), корректность вычитания (desc – asc), обработку чисел с ведущими нулями (например, 0378 → 378).
Оптимизация и алгоритмические задачи, например, анализ поведения для n-значных чисел (3-значные → 495, 4-значные → 6174, 5-значные → циклы).
Генерация творческих идей.
Константа Капрекара — удивительный математический феномен, который демонстрирует, как простые операции с числами могут приводить к неожиданным закономерностям.
Комментарии (14)
pnmv
19.05.2025 13:25я пробовал составить алгоритм, так, чтобы не требовался отсев, и выводил, в консоли, количество итераций, для каждого четырехзначного, от 0 до 9999 включительно, блоком 100х100 символов. выглядело интересно.
Oedo
19.05.2025 13:25Берём число 5554, что соответствует утверждению "кроме тех, в которых все цифры одинаковые, например, 5555 ".
Располагаем числа в порядке убывания - 5554, затем в порядке возрастания - 4555.
Вычисляем: 5554-4555=999. Следующий шаг?
CaptainFlint
19.05.2025 13:259990-0999 = 8991
Sqwair
19.05.2025 13:25Чего ради самопроизвольно увеличиваем число на порядок?!
CaptainFlint
19.05.2025 13:25Вопрос из категории "чего ради возводить в квадрат длины сторон прямоугольного треугольника и затем складывать".
thenonsense
19.05.2025 13:25Постоянные для четырёхзначных и трёхзначных тоже нумерологически сводятся именно к 9:
6174 = 6+4+1+7 = 10+8 = 18 = 1+8 = 9
495 = 4+5+9 = 9+9 = 18 = 1+8 = 9
wataru
19.05.2025 13:25Это признак делимости на 9. А числа, получившиеся после одного шага алгоритма, всегда делятся на 9. Потому что abcd-dcba=1000a+100b+10c+d - 1000d-100c-10b-1a = 999a+90b-90c-999d = 9(111a+10b-10c-111d).
В произвольной системе счисления будет делимость на BASE-1, и признак там такой же - рекурсивная сумма цифр, пока не получится число в одну цифру.
И основанно это все на факте что, BASE = 1 (mod BASE-1).
pnmv
две подряд сортировки, наверное, не нужны. можно просто перевернуть то, что уже отсортировали.