Как стать автором
Обновить

Постоянная Капрекара: алгоритм, который всегда сводится к одному числу

Время на прочтение4 мин
Количество просмотров8.2K

В мире математики существует множество удивительных чисел, которые обладают уникальными свойствами. Изучение подобных математических феноменов развивает логическое мышление, открывает новые горизонты для исследований и практических применений.

В 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-значные → циклы).

  • Генерация творческих идей.

Константа Капрекара — удивительный математический феномен, который демонстрирует, как простые операции с числами могут приводить к неожиданным закономерностям.

Теги:
Хабы:
+12
Комментарии13

Публикации

Ближайшие события