Как определить простое число в Excel: 5 рабочих методов с примерами

Простые числа — основа теории чисел, но их поиск вручную среди сотен строк Excel может занять часы. К счастью, электронные таблицы умеют автоматизировать эту задачу: от элементарных формул до сложных алгоритмов на VBA. В этой статье вы найдёте 5 проверенных методов — от самого простого (для новичков) до оптимизированных решений для работы с большими массивами данных.

Многие ошибочно думают, что для проверки простоты числа в Excel обязательно знать программирование. На самом деле, даже стандартных функций ЕСЛИ, ОСТАТ и КОРЕНЬ достаточно для базовой проверки. А если вам нужно обработать столбец из 10 000 чисел — мы покажем, как ускорить процесс в 100 раз с помощью Power Query или макросов. Спойлер: самый быстрый метод описан в последнем разделе.

Прежде чем переходить к практике, давайте вспомним определение: простое число — это натуральное число больше 1, которое делится только на 1 и на само себя. Примеры: 2, 3, 5, 7, 11. Число 1 простым не считается (это важно для корректных формул!). В Excel проверка простоты сводится к поиску делителей числа в диапазоне от 2 до его квадратного корня — это ключевая оптимизация, которую часто упускают.

Метод 1: Проверка простоты числа без программирования (формула для одной ячейки)

Если вам нужно проверить одно число (например, в ячейке A1), используйте эту формулу:

=ЕСЛИ(ИЛИ(A1=2; A1=3; И(A1>1; НЕ(ЕЧЁТН(A1)); СУММПРОИЗВ(--(ОСТАТ(A1;СТРОКА(ДВССЫЛ("3:"&ЦЕЛОЕ(КОРЕНЬ(A1)))))<>0))=ЦЕЛОЕ(КОРЕНЬ(A1))-2))); "Простое"; "Составное")

Как она работает:

  1. Сначала проверяются числа 2 и 3 (они простые по определению).
  2. Для остальных чисел:
    • Исключаются чётные числа (кроме 2) с помощью ЕЧЁТН.
    • Функция ОСТАТ проверяет делимость на все нечётные числа от 3 до квадратного корня исходного числа.
    • СУММПРОИЗВ считает количество делителей с остатком ≠ 0.

⚠️ Внимание: Формула не работает для чисел меньше 2 и чисел с плавающей запятой. Чтобы избежать ошибок, добавьте внешнюю проверку:

=ЕСЛИ(ИЛИ(A1<2; A1<>ЦЕЛОЕ(A1)); "Некорректное число"; [основная_формула])

Метод 2: Формула массива для диапазона чисел (Excel 365 и 2019)

Для проверки целого столбца (например, A2:A100) в Excel 365 или 2019 используйте динамическую формулу массива:

=ЕСЛИОШИБКА(

ЕСЛИ(

(A2:A100<2) + (A2:A100<>ЦЕЛОЕ(A2:A100)); "Некорректно";

ЕСЛИ(

(A2:A100=2) + (A2:A100=3); "Простое";

ЕСЛИ(

ЕЧЁТН(A2:A100); "Составное";

ПУСТОТА(ФИЛЬТР(

СТРОКА(ДВССЫЛ("3:"&МАКС(ЦЕЛОЕ(КОРЕНЬ(A2:A100)))));

ОСТАТ(A2:A100; СТРОКА(ДВССЫЛ("3:"&МАКС(ЦЕЛОЕ(КОРЕНЬ(A2:A100))))))=0

)); "Простое"; "Составное"

)

)

); ""

)

Особенности метода:

  • 🔹 Работает только в новых версиях Excel (с поддержкой динамических массивов).
  • 🔹 Автоматически обрабатывает весь диапазон — не нужно протягивать формулу вниз.
  • 🔹 Использует ФИЛЬТР для поиска делителей, что ускоряет вычисления.
  • 🔹 Возвращает пустую строку для пустых ячеек (благодаря ЕСЛИОШИБКА).

Критическая деталь: Если в вашем диапазоне есть числа больше 10 000, замените МАКС(ЦЕЛОЕ(КОРЕНЬ(...))) на фиксированное значение (например, 100), иначе формула может тормозить.

📊 Какую версию Excel вы используете?
Excel 2010-2016
Excel 2019
Excel 365 (подписка)
LibreOffice Calc
Другая

Метод 3: Пользовательская функция на VBA (для больших чисел)

Если вам нужно проверять числа больше 1 000 000 или обрабатывать десятки тысяч строк, стандартные формулы будут работать слишком медленно. В этом случае поможет пользовательская функция на VBA:

1. Нажмите Alt + F11, чтобы открыть редактор VBA.

2. Вставьте новый модуль (Insert → Module) и добавьте этот код:

Function IsPrime(num As Variant) As String

If Not IsNumeric(num) Or num <> Int(num) Or num < 2 Then

IsPrime = "Некорректно"

Exit Function

End If

If num = 2 Then

IsPrime = "Простое"

Exit Function

End If

If num Mod 2 = 0 Then

IsPrime = "Составное"

Exit Function

End If

Dim i As Long, maxDivisor As Long

maxDivisor = Sqr(num)

For i = 3 To maxDivisor Step 2

If num Mod i = 0 Then

IsPrime = "Составное"

Exit Function

End If

Next i

IsPrime = "Простое"

End Function

3. Теперь в любой ячейке можно использовать функцию =IsPrime(A1).

Преимущества метода:

  • 🔹 В 10-100 раз быстрее формул для больших чисел.
  • 🔹 Обрабатывает до 2^53 (максимальное число в Excel).
  • 🔹 Легко модифицировать (например, добавить проверку на палиндромы).
Как ускорить функцию для чисел > 10^6?

Замените цикл For на проверку делимости только на простые числа до √n. Для этого предварительно сгенерируйте список простых чисел (например, решетом Эратосфена) и сохраните их в массиве.

Метод 4: Power Query для массовой обработки

Power Query (доступен в Excel 2016+) идеален для обработки больших наборов данных. Например, если у вас список из 50 000 чисел, этот метод сэкономит часы работы:

1. Выделите ваш диапазон и перейдите на вкладку Данные → Из таблицы/диапазона.

2. В редакторе Power Query добавьте пользовательский столбец с формулой:

(number) =>

let

isPrime =

if number < 2 or number <> Number.Round(number) then "Некорректно"

else if number = 2 then "Простое"

else if Number.Mod(number, 2) = 0 then "Составное"

else

let

maxDivisor = Number.Round(Number.Sqrt(number)),

divisors = List.Numbers(3, (maxDivisor - 3)/2 + 1, 2),

hasDivisor = List.AnyTrue(List.Transform(divisors, (d) => Number.Mod(number, d) = 0))

in

if hasDivisor then "Составное" else "Простое"

in

isPrime

3. Нажмите Закрыть и загрузить — результат появится на новом листе.

Почему это лучше формул:

КритерийФормулы ExcelPower Query
Скорость обработки 10 000 чисел~30 секунд~2 секунды
Максимальное числоОграничено длиной формулыДо 2^53
ГибкостьСложно модифицироватьЛегко добавить новые проверки
АвтоматизацияНужно обновлять вручнуюОбновляется при изменении данных

Исключите пустые ячейки|Преобразуйте текстовые числа в числовой формат (=ЗНАЧЕН(A1))|Удалите дубликаты (если не нужны)|Отсортируйте данные по возрастанию (ускорит обработку)-->

Метод 5: Оптимизированный алгоритм (решето Эратосфена)

Если вам нужно найти все простые числа в диапазоне (например, от 1 до 10 000), используйте решето Эратосфена. Этот алгоритм в 10 раз эффективнее поиска делителей для каждого числа отдельно.

Создайте таблицу с числами от 2 до N (где N — ваше максимальное число). Затем:

  1. Выделите первую ячейку (число 2) как простое.
  2. Удалите все кратные этому числу (4, 6, 8,...).
  3. Повторите для следующего невычеркнутого числа (3, затем 5 и т.д.).

В Excel это реализуется через VBA или Power Query. Пример кода для VBA:

Sub SieveOfEratosthenes()

Dim n As Long, i As Long, j As Long

n = 10000 ' Максимальное число

Dim isPrime() As Boolean

ReDim isPrime(1 To n)

For i = 2 To n: isPrime(i) = True: Next i

For i = 2 To Sqr(n)

If isPrime(i) Then

For j = i * i To n Step i

isPrime(j) = False

Next j

End If

Next i

' Вывод результатов на лист

Dim outputRow As Long: outputRow = 1

For i = 2 To n

If isPrime(i) Then

Cells(outputRow, 1).Value = i

outputRow = outputRow + 1

End If

Next i

End Sub

⚠️ Внимание: Для N > 1 000 000 этот макрос может занять несколько минут. Чтобы ускорить работу:

  • 🔹 Используйте Application.ScreenUpdating = False в начале макроса.
  • 🔹 Записывайте результаты в массив, а не прямо на лист.
  • 🔹 Для N > 10^7 рассмотрите варианты на Python или C++.

Типичные ошибки и как их избежать

Даже опытные пользователи Excel допускают ошибки при работе с простыми числами. Вот самые распространённые:

⚠️ Внимание: Формулы с ОСТАТ и КОРЕНЬ могут давать неверные результаты для чисел вида p^2 (например, 49 = 7×7), если не учитывать целочисленное деление. Всегда проверяйте граничные случаи!

Ошибка 1: Пропуск числа 2

  • 🔸 Многие формулы начинают проверку с 3, забывая, что 2 — единственное чётное простое число.
  • 🔸 Решение: Всегда добавляйте отдельную проверку =ЕСЛИ(A1=2; "Простое"; ...).

Ошибка 2: Неучёт нецелых чисел

  • 🔸 Формулы вроде ОСТАТ(A1; 3) вернут ошибку, если в ячейке текст или дробь.
  • 🔸 Решение: Используйте ЕСЛИ(И(ЧИСЛО(A1); A1=ЦЕЛОЕ(A1)); ...).

Ошибка 3: Перебор всех делителей до N (вместо √N)

  • 🔸 Проверка делимости до самого числа (а не до его корня) увеличивает время вычислений в 100+ раз.
  • 🔸 Решение: Всегда используйте ЦЕЛОЕ(КОРЕНЬ(A1)) как верхнюю границу.

Ошибка 4: Игнорирование кэширования в VBA

  • 🔸 Повторный расчёт простоты одного и того же числа в цикле замедляет макросы.
  • 🔸 Решение: Сохраняйте результаты в словарь (Scripting.Dictionary).

FAQ: Ответы на частые вопросы

Можно ли найти простые числа в Excel Online?

Да, но с ограничениями:

  • 🔹 Методы 1 и 2 (формулы) работают полностью.
  • 🔹 VBA (метод 3) и Power Query (метод 4) недоступны.
  • 🔹 Для больших чисел используйте Google Sheets с =ISPRIME (нужна установка надстройки).
Почему моя формула возвращает #ЧИСЛО! для числа 1 000 000?

Это ограничение Excel:

  • 🔹 Стандартные формулы не оптимизированы для больших чисел.
  • 🔹 Используйте VBA (метод 3) или разбивайте задачу на части (например, проверяйте диапазоны по 10 000 чисел).
  • 🔹 Для чисел > 2^53 даже VBA не поможет — нужны специализированные программы (Wolfram Mathematica, Python).
Как найти ближайшее простое число к заданному?

Добавьте этот код в VBA:

Function NextPrime(num As Long) As Long

If num < 2 Then NextPrime = 2: Exit Function

Do

num = num + 1

If IsPrime(num) = "Простое" Then

NextPrime = num

Exit Function

End If

Loop

End Function

Аналогично пишется функция PrevPrime (уменьшайте num вместо увеличения).

Можно ли использовать эти методы для проверки чисел на простоту в Google Таблицах?

Да, но с поправками:

  • 🔹 Замените ДВССЫЛ на ROW(INDIRECT(...)).
  • 🔹 В Google Apps Script (аналог VBA) используйте Math.sqrt() вместо SQR.
  • 🔹 Для удобства установите надстройку "Prime Number Tools" из магазина надстроек.
Как визуализировать простые числа в Excel?

Создайте тепловую карту:

  1. Сгенерируйте таблицу чисел от 1 до N (например, 100×100).
  2. Добавьте столбец с проверкой простоты (любым из методов выше).
  3. Примените Условное форматирование → Цветовые шкалы, где простые числа выделяются зелёным, а составные — красным.

Пример формулы для условного форматирования:

=$B1="Простое"

(где столбец B содержит результаты проверки).