Проверка на простоту в excel

Как мы все знаем, простое число — это натуральное число, которое содержит только два различных делителя натуральных чисел: единицу и само себя. Если у вас есть список чисел на листе, как вы можете проверить, являются ли они простыми числами?

Проверьте, является ли число простым числом с помощью формулы массива

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


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

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

1. Введите следующую формулу в пустую ячейку — например, C2 рядом с вашими данными:

=IF(A2=2,»Prime»,IF(AND(MOD(A2,ROW(INDIRECT(«2:»&ROUNDUP(SQRT(A2),0))))<>0),»Prime»,»Not Prime»)) (A2 содержит ли ячейка число, которое вы хотите проверить), а затем нажмите Shift + Ctrl + Enter вместе, и вы получите результат, если число простое, в ячейке будет отображаться «Prime», если нет, будет отображаться «Not Prime», см. снимок экрана:

док проверим если простое 1

2. Затем выберите ячейку C2 и перетащите дескриптор заполнения вниз к ячейкам, к которым вы хотите применить эту формулу, и все числа будут идентифицированы, является ли это простым числом или нет. Смотрите скриншот:

док проверим если простое 2


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

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

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.

Код VBA: проверьте, является ли число простым или нет:

Function CheckPrime(Numb As Single) As Boolean
'Updateby Extendoffice
    Dim X As Long
    If Numb < 2 Or (Numb <> 2 And Numb Mod 2 = 0) _
     Or Numb <> Int(Numb) Then Exit Function
    For X = 3 To Sqr(Numb) Step 2
        If Numb Mod X = 0 Then Exit Function
    Next
    CheckPrime = True
End Function

3. Затем сохраните и закройте этот код, вернитесь на рабочий лист и введите следующую формулу: = checkprime (A2) в пустую ячейку рядом с вашим списком номеров, а затем перетащите дескриптор заполнения вниз к ячейкам, которые вы хотите содержать эту формулу, если число является простым числом, оно будет отображать ИСТИНА, если нет, оно отобразит ЛОЖЬ, см. снимок экрана:

док проверим если простое 3


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

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

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

вкладка kte 201905


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

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

офисный дно

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    A prime number is a number that is greater than 1 and has no positive divisor other than 1 and the number itself.

    Approach:

    To check whether the number is prime or not we have to divide the number with all the numbers between 2 and the square root of that number. And if it gives remainder 0 in any of the divisions it means that the number is a positive factor and ultimately results in a non-prime number. So if any of the divisions don’t result in the remainder 0 then it means that the number doesn’t have any positive factor and ultimately results in the Prime number.

    • Take the number
    • If the number is 2 then it is a Prime number else follow the next steps
    • Derive the square root of the number
    • Take the upper bound of the square root obtained and then minus it by one
    • Divide the number with all the numbers between 2 and the square root of the number
    • If the remainder is 0 in any of the divisions then non-prime.
    • Else it is the prime number

    Formula:

    =IF(F6=2,"Prime",IF(AND(MOD(F6,ROW(OFFSET($C$2,,,ROUNDUP(SQRT(F6),0)-1)))<>0),"Prime","Not Prime"))

    Let’s see each of these functions one by one so that it is clearly understood.

    Step1: First of all check if the given number is 2 or not and if it is TRUE then print out that it is PRIME.

    Step 2: If the number is not 2 then derive the square root of the given number.

    Step 3: Round off the output of the square root and minus one from it ( we have to check from 2 to square root of a given number which is not included)

    Step 4: Taking the range of numbers from the 2 to the one less than the square root of the given number.

    Step 5: Taking one by one, the numbers from that range to evaluate further for the division.

    Step-6: Dividing the given number from the number in the range of 2 to one less then square root of the given number and checking whether it is 0 or not. If it is 0 then the given number is NOT-PRIME and if it is not 0 then the given number is PRIME.

    Output:

    Like Article

    Save Article

    Использование массивов позволяют упростить многие вычисления.
    В частности все манипуляции, описанные в статье «Является ли число простым», можно заменить одной формулой.

    Пусть в ячейке A1 находится число и нужно проверить простое ли оно. Достаточно в ячейку B1 ввести такую формулу:

    =ЕСЛИ(МИН(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«2:»&ОКРУГЛ(КОРЕНЬ(A1);)))))=0;»составное»;»простое»)

    Можно пойти еще дальше и записать в ячейке C1 формулу:

    =СУММ(—(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«1:»&A1)))=0))

    Эта формула покажет сколько у числа в ячейке A1 делителей.
    Например, для числа 12 количество делителей будет 6, а именно 1, 2, 3, 4, 6 и само число 12.

    Указанные формулы используют массивы, поэтому после окончания ввода нужно нажать CTRL+SHIFT+ENTER.

    Похожие по тематике посты — еще почитать:

     

    cheesepls

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

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

    Здравствуйте!

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

     

    Bema

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

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

    VBA или формулой?

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

     

    cheesepls

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

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

    #3

    20.05.2018 16:20:15

    Цитата
    Bema написал:
    VBA или формулой?

    VBA

     

    Андрей VG

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

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

    Excel 2016, 365

    #4

    20.05.2018 16:22:33

    Доброе время суток

    Цитата
    cheesepls написал:
    Никак не догоняю

    А по конкретнее?

    Решето Эратосфена

    Цитата
    Bema написал:
    формулой

    Коллега, а как?!

    Изменено: Андрей VG20.05.2018 16:23:08

     

    Bema

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

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

    #5

    20.05.2018 16:32:52

    Цитата
    cheesepls написал:
    Реализовать программу

    Понятно, что макрос, но можно и такой достаточно простой формулой массива:
    =ЕСЛИ(ИЛИ(СУММ(—(0=ОСТАТ(A1/СТРОКА(СМЕЩ(A1;;;A1));1)))=2;A1=1);»Простое»;»Составное»)

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

    • Какое число.xlsx (9.03 КБ)

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

     

    sokol92

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

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

    Здравствуйте, Bema! Симпатичная формула, но, начиная с определенного значения дает, естественно, ошибку. Кроме того, проверять делители можно до квадратного корня из числа.

     

    Bema

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

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

    #7

    20.05.2018 17:02:19

    Цитата
    sokol92 написал:
    начиная с определенного значения дает, естественно, ошибку.

    Здравствуйте, sokol92, Видимо строки закончились.

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

     

    sokol92

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

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

    #8

    20.05.2018 17:22:49

    Цитата
    Bema написал:
    Видимо строки закончились

    Да, конечно. Тема непонятна. Достаточно простого поиска в сети, например «prime number vba»

    Изменено: sokol9220.05.2018 17:24:58

    Владимир

     

    bedvit

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

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

    Виталий

    Когда-то писал довольно шустрый алгоритм. Число до 30 знаков отрабатывает за секунды. Реализовано как отдельная программа.

    Решение на С++

    . Можно, конечно положить в dll или xll, открывать в Excel или в VBA. Но кому это нужно, обычно хотят, что бы все расжевали и код с файлом примером приложили, как готовое решение. Поэтому оставлю ссылку для спецов форума и энтузиастов (будет спрос, можно и библу набросать).

    «Бритва Оккама» или «Принцип Калашникова»?

     

    sokol92

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

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

    Здравствуйте, Виталий! Можно добавить соответствующие функции в Ваш интерфейс к MPIR.

     

    bedvit

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

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

    Виталий

    sokol92, Приветствую! Да, можно положить в СОМ, как свойство или метод класса целых чисел, возвращающий массив решений или перечисление в строке через разделитель (

    в проекте на библиотеках MPIR

    )

    «Бритва Оккама» или «Принцип Калашникова»?

     

    sokol92

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

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

    Именно это я и имел в виду. Эффективность MPIR в такого рода задачах на несколько порядков выше, чем кода на VBA.

     

    bedvit

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

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

    Виталий

    Да это так, узкие места в этих библиотеках написаны на ассемблере (быстрее асма ничего не работает). Можно реализовать именно проверку на простоту — да/нет, это будет ещё быстрее, чем поиск делителей в моем решении. Мое решение, если вы почитаете блог, тоже основано на MPIR, многопоточности, оптимизации

    wheel factorization

    и некоторых других идеях оптимизации.

    Изменено: bedvit20.05.2018 20:26:11

    «Бритва Оккама» или «Принцип Калашникова»?

     

    bedvit

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

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

    Виталий

    Если это будет интересно форуму, добавлю свойство в СОМ, и в VBA «Программа, проверяющая число на простоту» будет размером/состоять из… 3 строк :)

    «Бритва Оккама» или «Принцип Калашникова»?

     

    БМВ

    Модератор

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

    Excel 2013, 2016

    Bema, ну снова вы за смещение, когда уж   от летучести то через a1:index(A:A  …. :-)
    Позволю немного оптимизнуть
    =IF(SUM(—(0=MOD(A1/ROW(A1:INDEX(A:A;A1/2));1)))=1;»Простое»;»Составное»)
    диапазон проверки сокращаем в двое, понятно что максимальный делитель может быть не более половины. Так как Ну совершенно очевидно, что на 1 и на само себя все числа делятся, по этому OR можно убрать и сравнивать с 1 так как до самого числа мы уже не добираемся.
     

    Изменено: БМВ20.05.2018 21:08:38

    По вопросам из тем форума, личку не читаю.

     

    БМВ,
    sokol92 обращал внимание, что верхний предел можно ограничить КОРЕНЬ(А1), а не А1/2
    если в А1 1 млн. есть разница перебирать значения от 2 до 1000 или до 500тыс.?

    Изменено: Ігор Гончаренко20.05.2018 21:23:03

    Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

     

    БМВ

    Модератор

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

    Excel 2013, 2016

    Ігор Гончаренко,
    Игорь, /2 первое что пришло на ум, а то что Владимир написал я не видел.

    По вопросам из тем форума, личку не читаю.

     

    Jack Famous

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

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

    OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

    Ігор Гончаренко, БМВ,  вы смотрелм

    ссылку

    от Андрея? Как по мне, Решето Эратосфена уже очень неплохой алгоритм, а там ещё и модификации есть…

    Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

     

    bedvit

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

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

    Виталий

    Jack Famous, предполагаю, нужно готовое решение. Потому как и Андрей давал

    ссылку

    и я на свой

    блог

    , где прописан быстрый алгоритм нахождения простых чисел. У меня и решение в открытом доступе, правда не на VBA, но на VBA можно реализовать похожий или сделать библу, добавить в существующий проект (см.посты 10-14). Но, это же надо читать, вникать, писать код :)

    Изменено: bedvit22.05.2018 10:17:03

    «Бритва Оккама» или «Принцип Калашникова»?

     

    БМВ

    Модератор

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

    Excel 2013, 2016

    Jack Famous,  Алгоритмом то каждый может, вы формулой попробуйте :-)
    собственно по итогу
    =IF(SUM(—(0=MOD(A1/ROW(A1:INDEX(A:A;SQRT(A1)));1)))=1;»Простое»;»Составное»)

    По мотивам следующего поста от MCH

    =CHOOSE(IF(INT(A1)<>A1;;IF(A1<4;1;IF(MOD(A1;2)=0;;IF(SUM(—(0=MOD(A1/((ROW($A$2:INDEX($A:$A;SQRT(A1)/2))-1)*2+1);1)))=1;1))))+1;»Составное»;»Простое»)

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

    • Prime.xlsx (8.74 КБ)

    Изменено: БМВ22.05.2018 12:33:55

    По вопросам из тем форума, личку не читаю.

     

    MCH

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

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

    #21

    22.05.2018 10:38:24

    если нужно на VBA (обрабатывает 15-значные числа)

    Код
    Function IsPrime(n As Double) As Boolean
        Dim i As Long
        If Fix(n / 2) * 2 = n And n > 3 Then Exit Function
        For i = 3 To Int(Sqr(n)) Step 2
            If Fix(n / i) * i = n Then Exit Function
        Next i
        IsPrime = True
    End Function
     

    Jack Famous

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

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

    OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

    bedvit, в вашу беседу с sokol92 я вообще предпочёл не встревать — там что-то метафизическое для меня))))
    БМВ, да я к слову о ваших с Ігорем Гончаренко оптимизациях писал — вы там пределы и границы как раз обсуждали, а по ссылке именно эти вещи и описаны подробно  :)

    Изменено: Jack Famous22.05.2018 13:40:02

    Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

     

    sokol92

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

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

    #23

    22.05.2018 16:13:32

    Цитата
    Jack Famous написал:
    там что-то метафизическое для меня

    Никакой метафизики, чистая математика. В свое время профессиональный интернациональный коллектив специалистов по теории чисел создал высокооптимизированную библиотеку MPIR, которая, в частности, работает с большими целыми числами. Виталий (

    bedvit

    ) взял на себя тяжкий труд по популяризации этой библиотеки среди широкого круга пользователей VBA путем разработки специализированных классов, реализующих интерфейсы к MPIR. Естественно, что любой теоретикочисловой алгоритм, реализованный на VBA, будет на порядки менее эффективен, что алгоритм из MPIR.

    Владимир

     

    Jack Famous

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

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

    OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

    sokol92, спасибо  вам за науку, а bedvit за очередную полезную разработку :oops:  :)

    Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

     

    bedvit

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

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

    Виталий

    sokol92, благодарю за оценку моего проекта и понимании сколько трудов это стоило. Но не всем нужно столь точные вычисления. Это объективно. Сейчас пользуются не так много народа, но они есть и я этим вполне удовлетворен. Полученные знания и навыки тоже при мне. Двойная польза.
    Jack Famous, пользуйтесь, познавайте, дерзайте….
    Теперь по теме.
    Дабы не быть голословным накидал две функции в Excel (C API). Результаты выкладываю.
    Кому интересно — функция «PrimeInteger» определяет число простое/составное (60 знаков с легкостью) — пример в файле.
    Другая «FactorizationInteger» — факторизация натурального числа, и поиск простых делителей натурального числа (поиск всех делителей в разработке) — знаков 30.

    Работает все это очень просто.
    Открываем библиотеку вашей разрядности Excel (просто щелкнув мышью) и файл пример «prime» — (этот файл нужен только для примера работы функций), библы работают без него, можете взять её с собой на другой комп, можно установить как надстройку (что бы каждый раз не открывать).

    Да чуть не забыл — в библиотеках есть другие функции работы с длинными числами (вся арифметика) — все рабочие, можно тоже пользоваться.

    Изменено: bedvit22.05.2018 22:09:57

    «Бритва Оккама» или «Принцип Калашникова»?

     

    bedvit

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

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

    Виталий

    Для Excel x64 (2007 и выше). Делал быстро (как всегда по профилю — завал), поэтому в случае выявлении багов смело пишите (некоторый тестинг сделал, насколько позволяет время). Эти замечания относятся к стабильности работы. Арифметика должна быть верная, алгоритмы проверены приличным сроком использования.

    Изменено: bedvit22.05.2018 22:13:26

    «Бритва Оккама» или «Принцип Калашникова»?

     

    bedvit

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

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

    Виталий

    #27

    22.05.2018 22:46:42

    Функции можно использовать и на VBA, через

    Код
    Application.Run

    . sokol92, если вы пользуетесь COM, могу добавить и в методы класса целых чисел.

    «Бритва Оккама» или «Принцип Калашникова»?

    Тест на простоту числа — готов оплатить

    eugene407

    Дата: Вторник, 17.12.2013, 13:29 |
    Сообщение № 1

    Группа: Пользователи

    Ранг: Прохожий


    Репутация:

    0

    ±

    Замечаний:
    0% ±


    Excel 2007

    Нужно в EXCELL без использования макросов сделать тест на «простоту» числа в заданной ячейке (например C8).
    Простое число — это то, которое имеет два делителя, т.е делится без остатка только на 1 и на само себя (малая теорема Ферма).
    Если бы можно было с макросами, то было бы проще.
    Нашел в интернете вариант записи, но разобраться в нем сам не могу.
    Помоги плз — вопрос очень срочный — решить его надо максимум до 8-00МСК 18.12.2013
    Запись найденная в интернете:
    {=IF(OR(C8=2,C8=3),»prime»,IF(AND((MOD(C8,ROW(INDIRECT(«2:»&C8-1)))<>0)),»prime»,»not prime»))}
    Кто сможет дать вариант решения проще — буду рад ему с объяснениями?
    Или готов оплатить за подробное и доходчивое объяснение работы этого варианта?

     

    Ответить

    китин

    Дата: Вторник, 17.12.2013, 14:01 |
    Сообщение № 2

    Группа: Модераторы

    Ранг: Экселист

    Сообщений: 6973


    Репутация:

    1063

    ±

    Замечаний:
    0% ±


    Excel 2007;2010;2016

    Код

    =IF(OR(C8=2;C8=3);»prime»;IF(AND((MOD(C8;ROW(INDIRECT(«2:»&C8-1)))<>0));»prime»;»not prime»))


    Не судите очень строго:я пытаюсь научиться
    ЯД 41001877306852

    Сообщение отредактировал китинВторник, 17.12.2013, 14:04

     

    Ответить

    eugene407

    Дата: Вторник, 17.12.2013, 14:13 |
    Сообщение № 3

    Группа: Пользователи

    Ранг: Прохожий


    Репутация:

    0

    ±

    Замечаний:
    0% ±


    Excel 2007

    =ЕСЛИ(ИЛИ(C8=2;C8=3);»prime»;ЕСЛИ(И((ОСТАТ(C8;СТРОКА(ДВССЫЛ(«2:»&C8-1)))<>0));»prime»;»not prime»))

    Локализация на русский — это понятно, вопрос в другом — подробное объяснение как это работает.
    Готов подробно объяснить?

     

    Ответить

    китин

    Дата: Вторник, 17.12.2013, 14:37 |
    Сообщение № 4

    Группа: Модераторы

    Ранг: Экселист

    Сообщений: 6973


    Репутация:

    1063

    ±

    Замечаний:
    0% ±


    Excel 2007;2010;2016

    попробую.

    Код

    СТРОКА(ДВССЫЛ(«2:»&C8-1))

    дает №№строк со 2 по число в ячейке С8-1.если число к примеру 10 то получится СТРОКА2 СТРОКА9.ОСТАТ.это остаток от деления числа в ячейке С8 на строку 2-9,то есть на наших баранах это остаток от деления 10 на 2,3,4,….9.и если этот остаток <>0,то число простое.а если хоть один остаток равен 0,то число не простое.как в случае с 10.10/2=5.остаток 0.ЛОЖЬ=>число не простое.
    фу 7 потов сошло.надеюсь понятно объяснил
    ЗЫ.господа асы Экселя если что не так,поправьте


    Не судите очень строго:я пытаюсь научиться
    ЯД 41001877306852

    Сообщение отредактировал китинВторник, 17.12.2013, 14:39

     

    Ответить

    _Boroda_

    Дата: Вторник, 17.12.2013, 14:40 |
    Сообщение № 5

    Группа: Модераторы

    Ранг: Местный житель

    Сообщений: 16618


    Репутация:

    6465

    ±

    Замечаний:
    0% ±


    2003; 2007; 2010; 2013 RUS

    «Просто́е число́ — это натуральное число, имеющее ровно два различных натуральных делителя: единицу и само себя» — Википедия
    То есть, другими словами, остаток от деления этого числа (Х) на любое число, начиная с 2 и заканчивая Х-1 не должен быть равен нулю
    а) ДВССЫЛ(«2:»&C8-1) как раз дает нам массив из ячеек строк со 2-й по (Х-1)-ю
    Правда, я бы написал ДВССЫЛ(«A2:A»&C8-1) — немного больше букв, но зато массив получается только из ячеек столбца А строк со 2-й по (Х-1)-ю
    б) СТРОКА(ДВССЫЛ(«2:»&C8-1)) дает нам номера строк ячеек из п. а)
    в) (ОСТАТ(C8;СТРОКА(ДВССЫЛ(«2:»&C8-1)))<>0 — делим наше число Х на полученное в п.б) и смотрим, равен ли полученный остаток нулю. Если не равен, то ИСТИНА, если не равен, то ЛОЖЬ. И так для каждого числа из п.б)
    г) И(куча каких-то значений) — если хоть одно значение из кучи равно ЛОЖЬ, то вся И(куча каких-то значений) равна ЛОЖЬ. Т.е., если хоть одно значение из п.в) = ЛОЖЬ, то вся конструкция И(ОСТАТ(C8;СТРОКА(ДВССЫЛ(«2:»&C8-1))<>0)) равна ЛОЖЬ, иначе — конструкция равна ИСТИНА
    д) ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ(«2:»&C8-1)))<>0);»prime»;»not prime») — это, я уверен, Вам и без меня понятно. Если в п.г) ЛОЖЬ, то есть, мы нашли какое-то число, на которое без остатка делится наше Х, то, следовательно, Х — не простое число. Если не нашли такого делителя, то простое.
    е) Исключения составляют только число 2 — оно простое по определению
    Поэтому, просто переписываем формулу так:

    Код

    =ЕСЛИ(C8=2;»prime»;ЕСЛИ(И(ОСТАТ(C8;СТРОКА(ДВССЫЛ(«2:»&C8-1)))<>0);»prime»;»not prime»))

    Кстати, массивный ввод (это фигурные скобочки у Вас в формуле) теперь не нужен.
    А вот это я зря написал. Нужен.


    Скажи мне, кудесник, любимец ба’гов…
    Платная помощь:
    Boroda_Excel@mail.ru
    Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

    Сообщение отредактировал _Boroda_Вторник, 17.12.2013, 18:50

     

    Ответить

    eugene407

    Дата: Среда, 18.12.2013, 16:21 |
    Сообщение № 6

    Группа: Пользователи

    Ранг: Прохожий


    Репутация:

    0

    ±

    Замечаний:
    0% ±


    Excel 2007

    _Boroda_, Спасибо за помощь!

     

    Ответить

    MCH

    Дата: Среда, 18.12.2013, 18:16 |
    Сообщение № 7

    Группа: Админы

    Ранг: Старожил

    Сообщений: 2002


    Репутация:

    751

    ±

    Замечаний:
    ±


    Для ускорения расчетов и увеличения диапазона проверяемых чисел, формулу можно записать так:

    Код

    =ЕСЛИ(C8<4;»prime»;ЕСЛИ(И(ОСТАТ(C8;СТРОКА(A$2:ИНДЕКС(A:A;C8^0,5))));»prime»;»not prime»))

    (нет необходимости проверять все числа до С8-1, достаточно проверять до корня)

    Сообщение отредактировал MCHСреда, 18.12.2013, 18:17

     

    Ответить

    Понравилась статья? Поделить с друзьями:
  • Проверка на ошибку формулы excel
  • Проверка на отрицательное число excel
  • Проверка вхождения в текст excel
  • Проверка кода vba excel
  • Проверка всех ячеек excel vba