Как находить число делителей числа: секреты быстрых вычислений

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

Базовые понятия

Прежде чем перейти к методам нахождения числа делителей, давайте разберемся с базовыми определениями.

  • Делитель числа A - это такое число B, которое делит A без остатка.
  • Кратное числа A - это число, которое получается умножением A на некоторое целое число.
  • Простые числа имеют ровно 4 делителя: 1, само число, -1 и число со знаком минус.
  • У составных чисел число делителей больше 4.

Например, у числа 12 делителями являются 1, 2, 3, 4, 6, 12. А число 13 является простым, у него всего 4 делителя.

Разложение на множители

Как находить число делителей числа? Один из самых распространенных способов - это разложение исходного числа на простые множители. Алгоритм такой:

  1. Разложить число на простые множители
  2. Записать каноническое разложение в виде степеней этих множителей
  3. Найти число делителей по формуле: (степень 1-го множителя + 1) * (степень 2-го множителя + 1) * ... * (степень n-го множителя + 1)

Например, разложим число 500:

500 = 22 * 53

Подставляем в формулу:

(2 + 1) * (3 + 1) = 3 * 4 = 12

Получаем, что у 500 ровно 12 делителей.

Найдите наибольший общий делитель чисел

Часто нужно найти общие делители нескольких чисел. Для этого используется алгоритм Евклида.

Алгоритм Евклида - это пошаговая процедура для нахождения наибольшего общего делителя двух чисел.

Например, найдем НОД чисел 105 и 42:

  1. 105 = 42 * 2 + 21
  2. 42 = 21 * 2

НОД(105, 42) = НОД(42, 21) = 21.

Так как общие делители совпадают с делителями НОД, то делители 105 и 42 - это делители числа 21, то есть 1, 3, 7, 21.

Число 1 Делители
105 1, 3, 5, 7, 15, 21, 35, 105
42 1, 2, 3, 6, 7, 14, 21, 42

Таким образом, общими делителями чисел 105 и 42 являются числа 1, 3, 7, 21.

Решето Эратосфена

Находить число делителей числа можно эффективно с помощью решета Эратосфена - это алгоритм для нахождения всех простых чисел до некоторого числа N. Принцип работы такой:

  1. Записываем последовательность чисел от 2 до N
  2. Вычеркиваем кратные 2, оставляем само 2
  3. Переходим к следующему невычеркнутому числу (оно обязательно простое), вычеркиваем его кратные
  4. Повторяем пока есть невычеркнутые числа

В итоге остаются только простые числа. А если запоминать вычеркнутые числа, то мы получим раскладку любого числа до N на множители!

Например, запустим решето до 30:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29

Тогда раскладка числа 20:

20 = 22 * 5

Как находить делители по формуле

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

(степень 1-го множителя + 1) * (степень 2-го множителя + 1) * ... * (степень n-го множителя + 1)

Однако в некоторых случаях удобнее напрямую использовать общую формулу:

d(n) = (p1a1 + p1a1-1 + ... + 1) * ... * (pnan + pnan-1 + ... + 1)

Где a1 - степень 1-го множителя, an - степень n-го множителя.

Это позволяет быстро получить точное число делителей, не задействуя лишние вычислительные ресурсы.

Динамическое программирование делителей

Находить число делителей числа для последовательности чисел можно с помощью динамического программирования. А именно, если у нас уже посчитаны делители для чисел от 1 до N, то число делителей числа N+1 можно найти как:

  1. Разложить N+1 на множители
  2. Сложить число делителей этих множителей (которые мы уже знаем)

Это позволяет избежать лишних вычислений. Например, чтобы найти делители 100, достаточно сложить делители 4 (3 делителя) и делители 25 (3 делителя). Итого получаем 3 + 3 = 6 делителей.

Приближенные вычисления

Иногда не нужно точное число делителей, достаточно приблизительной оценки. Тогда можно воспользоваться следующими неравенствами:

  • Число делителей < корня квадратного из числа
  • Число делителей < корня кубического из числа (улучшенная оценка)

Эти неравенства позволяют быстро оценить порядок числа делителей. Например, для числа 10 000 000 оценка даст:

Число делителей < 100 = корень квадратный из 10 000 000

Связь делителей и НОД

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

Например, чтобы найти общие делители чисел 18, 24 и 36, достаточно вычислить их НОД. Разложим числа на множители:

  • 18 = 2 * 3 * 3
  • 24 = 2 * 2 * 2 * 3
  • 36 = 2 * 2 * 3 * 3

НОД(18, 24, 36) = 2 * 2 * 3 = 12

Значит, общими делителями будут делители числа 12: 1, 2, 3, 4, 6, 12.

Распространенные ошибки

Часто встречаются следующие ошибки при подсчете числа делителей:

  1. Неправильное разложение на множители. Например, число 20 записывают как 2 * 10 вместо 22 * 5.
  2. Неучтенные множители со степенью 0. Например, в числе 30 не учитывают множитель 70.
  3. Неверная формула подсчета. Используют упрощенный вариант (степень + 1) вместо полного.

Чтобы избежать ошибок, следует:

  • Проверять разложение на калькуляторе или с помощью решета Эратосфена
  • Явно указывать множители со степенью 0
  • Применять общую формулу с суммой степеней

Распределенные вычисления

Для очень больших чисел имеет смысл использовать распределенные вычисления. Алгоритм:

  1. Разбить число на 2 приблизительно равные части
  2. В параллельных потоках подсчитать делители каждой части
  3. Перемножить полученные результаты

Это позволяет сократить время счета за счет параллельной обработки. Например, 10 000-значное число можно разбить на два 5 000-значных куска и обработать их на разных ядрах процессора.

Кеширование результатов

При многократных вызовах подсчета делителей одних и тех же чисел имеет смысл кешировать промежуточные результаты. А именно сохранять:

  • Разложение на множители
  • Делители часто встречающихся простых множителей
  • Делители уже посчитанных чисел

Это избавит от повторных однотипных вычислений и ускорит работу алгоритмов.

Комментарии