Найти в Дзене

Как найти простые числа в Эксель?

Оглавление
2018 и 2019 годы был не простыми. 2020 особенно. Но если верить математике, 2021 будет простым.

Самый простой способ поиска простых чисел - решето Эратосфена. Правда, такой алгоритм в экселе без макросов реализовать затруднительно, если вообще возможно. Но мы можем воспользоваться некоторыми идеями из этого алгоритма для своего собственного. Поехали?

Вариант 1 - на основе решета Эратосфена.

Начнем с вывода всех натуральных чисел по порядку. Введем в ячейку A1 формулу:

=(СТРОККА()-1)*10+СТОЛБЕЦ()

или на английском:

=(ROW()-1)*10+COLUMN()

Отлично! Пол дела сделано. Копируем эту формулу, выделяем диапазон от A до J по горизонтали и от 1 строки до... ну скажем до 100 по вертикали и вставляем скопированную формулу. Это даст нам первые 1000 натуральных чисел. Хотите больше, просто выделите последнюю строку и "растяните" ее вниз.

Теперь нам нужно вычеркнуть все составные числа по следующему алгоритму. Вычеркивать будем с помощью условного фомратирования:

  • Если число меньше 4 - оно простое.
  • Если число стоит во втором, четвертом, пятом, шестом, восьмом или десятом столбце - оно точное не простое.
  • Нужно вычеркнуть число, если оно делится на числа из любой строки выше (для первой строки - если делится на числа левее).
Последнее правило, на самом деле избыточное, и можно проверять на делимость только для строк от 1 до строки, содержащей квадратный корень из проверямого числа. И проверять на делимость не для всех чисел, а только для простых чисел. Но у нас достаточно вычислительной мощи, а более сложный алгоримт в условном форматировании не задашь.

Зададим два правила условного форматирования:

  • Первое правило для первой строки. Разделим число на все числа в строке до него. Если оно делится только на 1 или себя, оно простое. Как это формализовать?

=ЕСЛИ(A1<4;0;ЕСЛИ(НАИМЕНЬШИЙ(ОСТАТ(A1;$A1:A1);3)=0;1;0))

...или на английском

=IF(A1<4;0;IF(SMALL(MOD(A1;$A1:A1);3)=0;1;0))

т.е., если число меньше 4, оно простое. Если оно делится как минимум на три числа слева от себя (включая себя и единицу), то оно составное. Функция ОСТАТ возвращает остаток от деления одного числа на другое, а НАИМЕНЬШИЙ возвращает наименьшее по счету указанное число.

  • Второе правило для всех оставшихся строк: все цифры в столбцах 2, 34, 5, 6, 8, 10 - составные. Если при делении на любое число выше (кроме единицы), оно дает в остатке отличное от нуля число, то это простое число, иначе составное.

=ЕСЛИ(ИЛИ(СТОЛБЕЦ(A2)=2; СТОЛБЕЦ(А2)=4;СТОЛБЕЦ(А2)=5; СТОЛБЕЦ(А2)=6; СТОЛБЕЦ(А2)=8; СТОЛБЕЦ(А2)=10);1;ЕСЛИ(НАИМЕНЬШИЙ(ОСТАТ(A2;$A$1:$J1);2)=0;1;0))

...или на английском
=IF(OR(COLUMN(A2)=2;COLUMN(A2)=4;COLUMN(A2)=5;COLUMN(A2)=6;COLUMN(A2)=8;COLUMN(A2)=10);1;IF(SMALL(MOD(A2;$A$1:$J1);2)=0;1;0))

И зададим форматом вычеркнуть все составные числа:

-2

Вариант 2. Просто проверка всех числе подряд.

На новом листе введем в ячейки A1 и A2 цифры 1 и 2, а в ячейку A3 формулу: =A2+1

Теперь в ячейках B1 и B2 введем 1 и 2, а в ячейке B3 формулу (обратите внимание на фигурные скобки, для ввода формулы нужно нажать Ctrl+Shift+Enter:

{ =ЕСЛИ(НАИМЕНЬШИЙ(ОСТАТ(A3;$A$1:A3);3)=0;"";A3) }

...на английском

{ =IF(SMALL(MOD(A3;$A$1:A3);3)=0;"";A3) }

Готово! Теперь если протянуть форумулы с третьей строки вниз, в колонке B будут отображаться только простые числа. Можно вывести их в колонку C без пробелов. Введем в ячейку C1 форумулу:

=ЕСЛИОШИБКА(НАИМЕНЬШИЙ($B:$B;ROW());"")

... на английском

=IFERROR(SMALL($B:$B;ROW());"")

И протянем ее вниз, насколько нужно.

-3

Готово! Еще я через условное форматирование отметил парные простые числа. Кому интересно как - делюсь файлом, смотрите!

Скачать файл Эксель с простыми числами.

Наука
7 млн интересуются