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

Самый простой алгоритм определения является ли число простым, это деление заданного натурального числа на все меньшие числа, начиная с числа 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
Регистрация: 01.01.1970

Здравствуйте! Как определить простое ли число или составное в эксель без VBA?!  

 

Bema

Пользователь

Сообщений: 6904
Регистрация: 15.02.2016

Добрый день. Вот такое соорудил, только на 1 выдает ошибку.

Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл

 

Пытливый

Пользователь

Сообщений: 4666
Регистрация: 22.12.2012

#3

27.12.2016 12:34:46

Можно как-то так формулой массива:
P.S. Добавил проверку на 1

Код
=ЕСЛИ(В1=1;"простое";ЕСЛИ(СУММ(--(ОСТАТ(В1;СТРОКА(СМЕЩ($A$1;0;0;В1;1)))=0))=2;"простое";"составное"))

В В1 — исследуемое число.

Изменено: Пытливый27.12.2016 12:37:12

Кому решение нужно — тот пример и рисует.

 

mallanik

Пользователь

Сообщений: 1
Регистрация: 27.12.2016

#4

27.12.2016 12:51:24

Код
=ЕСЛИ(B1=1;"Простое";ЕСЛИ(СУММ(--(ОСТАТ(B1;СТРОКА(ДВССЫЛ("1:"&B1)))=0))=2;"Простое";"Составное"))

Для этой формулы не нужен список чисел на листе от 1 до исследуемого числа.

 

MCH

Пользователь

Сообщений: 3886
Регистрация: 22.12.2012

формула для больших чисел (больше 2^20):
=ЕСЛИ(И(ОСТАТ(A1;СТРОКА(СМЕЩ($A$2;;;A1^0,5)))<>0)+(A1<4);»Простое»;»Составное»)

l

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Формула массива:
=ЕСЛИ(A1<4;»Простое»;ЕСЛИ(И(ОСТАТ(A1;СТРОКА(A2:ИНДЕКС(A:A;A1-1)))<>0);»Простое»;»Составное»))

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#7

28.12.2016 00:46:05

Цитата
MCH написал:
формула для больших чисел (больше 2^20)

По задумке, формула должна работать для чисел до 2^40, т.е. до 1,1*10^12.
Однако, формула возвращает #ЧИСЛО! уже при 268’435’456, т.е. при 2^28  :(
Как я выяснил, это связано с ограничением функции ОСТАТ(х;у) — результат деления х/у должен быть меньше 2^27=134’217’728!
То есть ОСТАТ(134217727,9999;1) =0,9999, а ОСТАТ(134217728;1) =#ЧИСЛО!
ОСТАТ(2^27*3-1;3) =2, а ОСТАТ(2^27*3;3) =#ЧИСЛО!
и т.д.
Можно переписать формулу, не используя функцию ОСТАТ, тогда она действительно работает до 10^12, формула массива

Код
=ЕСЛИ(И(ЧАСТНОЕ(A1;СТРОКА(СМЕЩ($A$2;;;A1^0,5)))<>A1/СТРОКА(СМЕЩ($A$2;;;A1^0,5)))+(A1<4);"Простое";"Составное")
 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#8

28.12.2016 01:27:46

Можно расширить диапазон работы формулы еще в 4 раза, примерно до 4,3*10^12, если не проверять четные числа. Формула массива

Код
=ЕСЛИ(A1<4;"Простое";ЕСЛИ(ЕЧЁТН(A1);"Составное";ЕСЛИ(И(ЧАСТНОЕ(A1;СТРОКА(СМЕЩ($A$1;;;A1^0,5/2))*2+1)<>A1/(СТРОКА(СМЕЩ($A$1;;;A1^0,5/2))*2+1));"Простое";"Составное")))
 

MCH

Пользователь

Сообщений: 3886
Регистрация: 22.12.2012

#9

28.12.2016 08:45:27

UDF, которая достаточно быстро раскладывает на простые множители пятнадцатизначные числа (опубликовано

здесь

)

Код
Function PrimeFact$(ByVal n#)
    Dim i&, txt$
    If n < 4 Then
        PrimeFact = "Prime"
        Exit Function
    End If
    i = 3
    While Fix(n / 2) = n / 2
        n = Fix(n / 2)
        txt = txt & "*2"
    Wend
    While CDbl(i) * i <= n
        If Fix(n / i) <> n / i Then i = i + 2 Else n = Fix(n / i): txt = txt & "*" & i
    Wend
    If n > 1 Then txt = txt & "*" & n
    If InStr(2, txt, "*") Then PrimeFact = Mid$(txt, 2) Else PrimeFact = "Prime"
End Function 

Прикрепленные файлы

  • PrimeFact.xlsm (17.42 КБ)

Изменено: MCH28.12.2016 08:57:51

 

olgats

Пользователь

Сообщений: 2
Регистрация: 28.12.2016

Bema, спасибо за пример, а если заменить =2 на <=2 это проблему с 1 не решит?

 

Bema

Пользователь

Сообщений: 6904
Регистрация: 15.02.2016

Дополнительная проверка на еденицу решит проблему.
=ЕСЛИ(A1=1;»Простое»;ЕСЛИ(СУММ(—((ОСТАТ(A1;СТРОКА($B$1:СМЕЩ($B$1;A1-1;))))=0))=2;»Простое»;»Составное»))
И формула работает до числа 65536, по количеству строк на листе Эксель.

Изменено: Bema28.12.2016 09:43:12

Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл

 

olgats

Пользователь

Сообщений: 2
Регистрация: 28.12.2016

#12

28.12.2016 12:33:50

Bema,  ну это как-то не изящно, надо добавлять 15 символов. Кстати 65536 можно увеличить до 1млн в новом экселе

Вы когда-нибудь пытались в Excel перечислить все простые числа между двумя заданными числами? В этой статье я расскажу о некоторых интересных методах решения этой задачи.

Сгенерировать все простые числа между двумя заданными числами с помощью формул

Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем


стрелка синий правый пузырь Сгенерировать все простые числа между двумя заданными числами с помощью формул

Объединение Определить имя функции и формулы, вы можете перечислить или сгенерировать все простые числа между двумя конкретными числами. Пожалуйста, сделайте следующее:

1. Создайте имя первого диапазона, нажав Формулы > Менеджер именИ в Менеджер имен диалоговое окно, нажмите Новинки кнопку, см. снимок экрана:

список документов простые числа 1

2. В Новое имя диалоговое окно в Имя и фамилия текстовое поле, пожалуйста, введите дальность в качестве имени диапазона, а затем введите эту формулу: = СТРОКА (КОСВЕННАЯ (Лист1! $ B $ 1 & «:» & Лист1! $ B $ 2)) (Sheet1 ваш текущий рабочий лист, который вы использовали, B1 и B2 являются начальным и конечным числами, которые вы указали) в Относится к текстовое поле, затем щелкните OK кнопку, чтобы вернуться к прежнему диалогу. Смотрите скриншот:

список документов простые числа 2

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) в Относится к текстовое поле, см. снимок экрана:

список документов простые числа 3

4. Затем нажмите OK и закройте диалоговые окна, выберите один столбец, в котором вы хотите перечислить все простые числа, и введите эту формулу: = ЕСЛИОШИБКА (штрих; «»)(простое число — это имя диапазона, которое вы создали на шаге 3) в строке формул, а затем нажмите CTRL + SHIFT + ВВОД вместе, все простые числа между заданными двумя числами перечислены, как показано на следующем снимке экрана:

список документов простые числа 4


стрелка синий правый пузырь Генерация всех простых чисел между двумя заданными числами с помощью функции, определяемой пользователем

Если первый метод несколько сложен, здесь вы можете применить Функция, определяемая пользователем решить его.

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, и все простые числа отображаются в одной ячейке, см. снимок экрана:

список документов простые числа 5


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Понравилась статья? Поделить с друзьями:
  • Как найти депутата в законе
  • Как составить пищевой рацион для подростка
  • Как найти вирус в стим
  • Как найти могилу если не знаешь кладбища
  • Как найти присланные фотографии в интернете