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