
В мире математики существует множество удивительных чисел, которые обладают уникальными свойствами. Изучение подобных математических феноменов развивает логическое мышление, открывает новые горизонты для исследований и практических применений.
В 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-значные → циклы).
Генерация творческих идей.
Константа Капрекара — удивительный математический феномен, который демонстрирует, как простые операции с числами могут приводить к неожиданным закономерностям.