Самый простой алгоритм определения является ли число простым, это деление заданного натурального числа на все меньшие числа, начиная с числа 2.
Если есть хотя бы один целый результат, то число не является простым.
Целый результат можно определить как нулевой остаток от деления.
Составляем массив остатков от деления числа из заданной ячейки на все предыдущие натуральные числа (начиная с числа 2) и находим минимальный остаток, если минимальный остаток равен 0, то число не может быть простым.
Для сокращения количества делителей имеет смысл делить не на все числа меньшие заданного, а только на числа меньшие чем квадратный корень из заданного числа, округлённый до целого числа.
Остаток от деления находим функцией ОСТАТ(число ; делитель)
Минимальное значение определяем функцией МИН(ОСТАТ(…))
Для составления массива чисел вводим формулу как формулу массива (для версий Excel меньше чем 2016 через CTRL+SHIFT+ENTER)
Если исходное число записано в ячейке A2, то формула имеет вид:
=ИЛИ(A2=2 ; МИН( ОСТАТ(A2 ; СТРОКА( ДВССЫЛ( «2:»&ОКРУГЛ( КОРЕНЬ(A2) ; 0))))) <> 0)
Пример применения формулы для Excel 2007:
С помощью приведённой формулы проверку можно осуществлять для целых чисел от 0
- до 99’999’999 ( для Excel 2007 )
- до 999’999’999’999 ( для бесплатной интернет версии )
обычно этого достаточно для решения большинства задач.
Пример проверки большого числа в Excel 2007
Пример проверки большого числа в бесплатной интернет версии
Использование массивов позволяют упростить многие вычисления.
В частности все манипуляции, описанные в статье «Является ли число простым», можно заменить одной формулой.
Пусть в ячейке A1 находится число и нужно проверить простое ли оно. Достаточно в ячейку B1 ввести такую формулу:
=ЕСЛИ(МИН(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«2:»&ОКРУГЛ(КОРЕНЬ(A1);)))))=0;»составное»;»простое»)
Можно пойти еще дальше и записать в ячейке C1 формулу:
=СУММ(—(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«1:»&A1)))=0))
Эта формула покажет сколько у числа в ячейке A1 делителей.
Например, для числа 12 количество делителей будет 6, а именно 1, 2, 3, 4, 6 и само число 12.
Указанные формулы используют массивы, поэтому после окончания ввода нужно нажать CTRL+SHIFT+ENTER.
Похожие по тематике посты — еще почитать:
Пробовали ли вы когда-нибудь в Excel перечислить все простые числа между двумя заданными числами? В этой статье я расскажу о некоторых интересных методах решения этой задачи.
Генерация всех простых чисел между двумя заданными числами с помощью формул
Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем
Генерация всех простых чисел между двумя заданными числами с помощью формул
Потрясающе! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Сэкономьте 50% своего времени и сократите тысячи щелчков мышью каждый день!
Комбинируя функцию Define Name и формулы, вы можете перечислить или сгенерировать все простые числа между двумя конкретными числами. Пожалуйста, сделайте следующее:
1 . Создайте имя первого диапазона, нажав Формулы > Диспетчер имен и в диалоговом окне Диспетчер имен нажмите New , см. снимок экрана:
2 . В диалоговом окне Новое имя в текстовом поле Имя введите rng в качестве имени диапазона, а затем введите эту формулу: = ROW (INDIRECT (Sheet1! $ B $ 1 & “:” & Sheet1! $ B $ 2)) ( Sheet1 – это ваш текущий рабочий лист, который вы использовали, и являются начальным и конечным числами, которые вы указали) в текстовое поле Относится к , затем нажмите кнопку OK , чтобы вернуться к предыдущему диалоговому окну. См. Снимок экрана:
3 . Нажмите кнопку Создать , чтобы создать другое имя диапазона, в диалоговом окне Новое имя введите имя prime в текстовое поле Имя , а затем введите эту формулу: = SMALL (IF (MMULT (- (IF (rng> TRANSPOSE (rng-Sheet1! $ B $ 1 + 2) ), MOD (rng, (rng> TRANSPOSE (rng-Sheet1! $ B $ 1 + 2)) * TRANSPOSE (rng-Sheet1! $ B $ 1 + 2))) = 0), rng-Sheet1! $ B $ 1 + 2 ) = 0, rng), ROW (INDIRECT (“1:” & Sheet1! $ B $ 2))) ( rng – первое имя диапазона, которое вы создали на шаге 2), в текстовое поле Относится к , см. снимок экрана:
4 . Затем нажмите OK , закройте диалоговые окна и выберите один столбец, в котором вы хотите перечислить все простые числа, и введите следующую формулу: = ЕСЛИОШИБКА (простое число, “”) ( prime – это имя диапазона, созданное на шаге 3) в строку формул, а затем нажмите CTRL + SHIFT + Вместе с клавишами ENTER все простые числа между заданными двумя числами отображаются, как показано на следующем снимке экрана:
Создает все простые числа между двумя заданные числа с функцией, определяемой пользователем
Если первый метод несколько сложен, здесь вы можете применить функцию, определяемую пользователем , чтобы решить эту проблему.
1 . Удерживая нажатыми клавиши ALT + F11 , откройте окно Microsoft Visual Basic для приложений .
2 . Нажмите Вставить > Module и вставьте следующий код в окно Module .
Код VBA: генерировать все простые числа между двумя определенными числами:
3 . Затем сохраните и закройте этот код, вернитесь на рабочий лист, введите следующую формулу: = prime (10,100) ( 10 – это начальный номер, а – конечный номер, между которыми вы хотите получить простые числа, вы можете изменить их по своему усмотрению), а затем нажмите клавишу Enter , и все простые числа отобразятся в одной ячейке, см. снимок экрана:
Dear bear Пользователь Сообщений: 6 |
Здравствуйте! Как определить простое ли число или составное в эксель без VBA?! |
Bema Пользователь Сообщений: 6904 |
Добрый день. Вот такое соорудил, только на 1 выдает ошибку. Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
Пытливый Пользователь Сообщений: 4666 |
#3 27.12.2016 12:34:46 Можно как-то так формулой массива:
В В1 — исследуемое число. Изменено: Пытливый — 27.12.2016 12:37:12 Кому решение нужно — тот пример и рисует. |
||
mallanik Пользователь Сообщений: 1 |
#4 27.12.2016 12:51:24
Для этой формулы не нужен список чисел на листе от 1 до исследуемого числа. |
||
MCH Пользователь Сообщений: 3886 |
формула для больших чисел (больше 2^20): l |
vikttur Пользователь Сообщений: 47199 |
Формула массива: |
Казанский Пользователь Сообщений: 8839 |
#7 28.12.2016 00:46:05
По задумке, формула должна работать для чисел до 2^40, т.е. до 1,1*10^12.
|
||||
Казанский Пользователь Сообщений: 8839 |
#8 28.12.2016 01:27:46 Можно расширить диапазон работы формулы еще в 4 раза, примерно до 4,3*10^12, если не проверять четные числа. Формула массива
|
||
MCH Пользователь Сообщений: 3886 |
#9 28.12.2016 08:45:27 UDF, которая достаточно быстро раскладывает на простые множители пятнадцатизначные числа (опубликовано здесь )
Прикрепленные файлы
Изменено: MCH — 28.12.2016 08:57:51 |
||
olgats Пользователь Сообщений: 2 |
Bema, спасибо за пример, а если заменить =2 на <=2 это проблему с 1 не решит? |
Bema Пользователь Сообщений: 6904 |
Дополнительная проверка на еденицу решит проблему. Изменено: Bema — 28.12.2016 09:43:12 Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
olgats Пользователь Сообщений: 2 |
#12 28.12.2016 12:33:50 Bema, ну это как-то не изящно, надо добавлять 15 символов. Кстати 65536 можно увеличить до 1млн в новом экселе |
Вы когда-нибудь пытались в Excel перечислить все простые числа между двумя заданными числами? В этой статье я расскажу о некоторых интересных методах решения этой задачи.
Сгенерировать все простые числа между двумя заданными числами с помощью формул
Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем
Сгенерировать все простые числа между двумя заданными числами с помощью формул
Объединение Определить имя функции и формулы, вы можете перечислить или сгенерировать все простые числа между двумя конкретными числами. Пожалуйста, сделайте следующее:
1. Создайте имя первого диапазона, нажав Формулы > Менеджер именИ в Менеджер имен диалоговое окно, нажмите Новинки кнопку, см. снимок экрана:
2. В Новое имя диалоговое окно в Имя и фамилия текстовое поле, пожалуйста, введите дальность в качестве имени диапазона, а затем введите эту формулу: = СТРОКА (КОСВЕННАЯ (Лист1! $ B $ 1 & «:» & Лист1! $ B $ 2)) (Sheet1 ваш текущий рабочий лист, который вы использовали, B1 и B2 являются начальным и конечным числами, которые вы указали) в Относится к текстовое поле, затем щелкните OK кнопку, чтобы вернуться к прежнему диалогу. Смотрите скриншот:
3. Продолжайте нажимать Новинки кнопку, чтобы создать другое имя диапазона, в Новое имя диалоговое окно введите имя простое число в Имя и фамилия текстовое поле, а затем введите эту формулу: =SMALL(IF(MMULT(—(IF(rng>TRANSPOSE(rng-Sheet1!$B$1+2),MOD(rng,(rng>TRANSPOSE(rng-Sheet1!$B$1+2))*TRANSPOSE(rng-Sheet1!$B$1+2)))=0),rng-Sheet1!$B$1+2)=0,rng),ROW(INDIRECT(«1:»&Sheet1!$B$2))) (дальность это первое имя диапазона, которое вы создали на шаге 2) в Относится к текстовое поле, см. снимок экрана:
4. Затем нажмите OK и закройте диалоговые окна, выберите один столбец, в котором вы хотите перечислить все простые числа, и введите эту формулу: = ЕСЛИОШИБКА (штрих; «»)(простое число — это имя диапазона, которое вы создали на шаге 3) в строке формул, а затем нажмите CTRL + SHIFT + ВВОД вместе, все простые числа между заданными двумя числами перечислены, как показано на следующем снимке экрана:
Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем
Если первый метод несколько сложен, здесь вы можете применить Функция, определяемая пользователем решить его.
1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.
Код VBA: генерировать все простые числа между двумя конкретными числами:
Function PRIME(St, En As Long)
'Updateby Extendoffice 20160613
Dim num As String
For n = St To En
For m = 2 To n - 1
If n Mod m = 0 Then GoTo 20:
Next m
num = num & n & ","
20:
Next n
PRIME = num
End Function
3. Затем сохраните и закройте этот код, вернитесь на рабочий лист, введите эту формулу: = простое число (10,100) (10 — начальный номер, а 100 — конечное число, между которым вы хотите получить простые числа, вы можете изменить их по своему усмотрению), а затем нажмите Enter key, и все простые числа отображаются в одной ячейке, см. снимок экрана:
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!