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. Просто проверка всех числе подряд.
На новом листе введем в ячейки 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());"")
И протянем ее вниз, насколько нужно.
Готово! Еще я через условное форматирование отметил парные простые числа. Кому интересно как - делюсь файлом, смотрите!
Скачать файл Эксель с простыми числами.