Сообщество Engee

Привлекательные числа

Автор
avatar-maximsidorovmaximsidorov
Notebook

Привлекательные числа (Attractive Numbers)

Этот пример показывает реализацию алгоритма для поиска привлекательных чисел от 1 до 120.

Введение

Алгоритм «привлекательных чисел» — это любопытная математическая задача, заключающаяся в определении таких натуральных чисел, сумма простых множителей которых является простым числом.

Что такое факторизация?

Каждое натуральное число можно представить в виде произведения простых чисел (факторов). Например:

  • Число 12 имеет простые множители , или запись с учётом степеней — .

Функция factor в Julia раскладывает входное число именно так.

Что значит число – “привлекательное”?

Число считается привлекательным, когда сумма всех его уникальных простых множителей (без учета степени) является простым числом.

Поясним:

  1. Для числа 12: факторизация → [2, 3] ⇒ сумма = 2 + 3 = 5.
  2. Так как 5 — простое ⇒ число 12 — привлекательное.

Нам нужно найти все такие числа в диапазоне от 1 до 120.

Решение задачи

Установка требуемого пакета

import Pkg; Pkg.add("Primes")

Подключение модуля Primes. Он предоставляет функции работы с простыми числами, например, isprime() проверяет, является ли число простым

using Primes

Функция isattractive(n) принимает целое положительное число n, затем:

  • factor(n) — получаем словарь простых делителей со степенями

  • values(...) — берём только значения (степени игнорируем)

  • sum(...) — складываем значения

  • isprime(...) — проверяем, простая ли эта сумма?

function isattractive(n)
    return isprime(sum(values(factor(n))))
end
isattractive (generic function with 1 method)

Функция printattractive(m, n):

  • принимает два аргумента - границы диапазона от m до n

  • вызывает фильтрацию массива m:n с использованием функции isattractive()

  • выводит красиво отформатированный список чисел через println()

function printattractive(m, n)
    println("Привлекательные числа от $m до $n:\n", filter(isattractive, m:n))
end
printattractive (generic function with 1 method)

Запуск вычислений, вызывается созданная выше функция с заданным диапазоном

printattractive(1, 120)
Привлекательные числа от 1 до 120:
[4, 6, 8, 9, 10, 12, 14, 15, 18, 20, 21, 22, 25, 26, 27, 28, 30, 32, 33, 34, 35, 38, 39, 42, 44, 45, 46, 48, 49, 50, 51, 52, 55, 57, 58, 62, 63, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 82, 85, 86, 87, 91, 92, 93, 94, 95, 98, 99, 102, 105, 106, 108, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120]

Заключение

На данном примере мы изучили, как решить интересную математическую задачу про "привлекательные" числа с использованием возможностей языка программирования Julia. Мы:

  • Научились применять библиотеку Primes для работы с простыми числами;
  • Использовали встроенную функцию factor() из Base.Math (часть стандартной библиотеки);
  • Написали функцию, которая проверяет, является ли число привлекательным;
  • Реализовали удобный способ отображения результата в терминале.

Подобный подход демонстрирует элегантность и читаемость кода на языке Julia, особенно при сочетании мощных встроенных средств и лаконичного синтаксиса.

Пример разработан с использованием материалов Rosetta Code