0 / 0 / 0
Регистрация: 28.01.2020
Сообщений: 28

Функция проверки числа на простоту

11.02.2020, 13:22. Показов 17501. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
10. **Написать функцию, которая возвращает истину, если переданное число простое, и ложь, если не простое.
Простое число – это число, которое делиться ТОЛЬКО на 1 и на себя (2, 5, 7, 11, 13, 17, 19, 23, 29 и т.д.).
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2020, 13:22
Ответы с готовыми решениями:

Рекурсивная функция проверки числа на простоту
Записуем в массив числа и провереем простые ли они(с помощю рекурсии) в концеивыводим количество простых чисел. Есть заготовка но что...

Рекурсивное значение функции проверки числа на простоту
У меня вопрос будет больше теоретического характера.Программа проверяет простое число или нет,функция проверки числа имеет возвращаемое...

Программа проверки числа на простоту. Не могу понять как она работает.
У меня в учебнике есть программа, она правильно работает, но я не могу понять каким образом она это делает. int i, j; ...

18
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
11.02.2020, 16:12
Лучший ответ Сообщение было отмечено Patrik1001 как решение

Решение

Patrik1001, В низ страницы не заглядывал?
C++ Скопировано
1
2
3
4
5
6
bool IsPime(int n)
{
   for(int i=2; i*i <= n; i++)
     if (n%i==0) return false;
   return true;
}
1
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,187
11.02.2020, 16:37
Можно чуток ускорить - нет необходимости делить на чётные числа. До цикла проверяем на 2. В цикле на 3, 5, 7 и т.д.
0
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
11.02.2020, 16:50
Цитата Сообщение от alexu_007 Посмотреть сообщение
Можно чуток ускорить
Можно рассматривать числа 6n+-1 или даже 30n +-1 +-7 +- 11 +-13. Небольшое ускорение это даст. В разы. Но разы - это не повод. Вот ежли бы порядки...
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.02.2020, 16:56
alexu_007, в рамках поставленной задачи не имеет смысла, ИМХО. Останутся числа, кратные 3, 5, 7 и т.д., делить на которые тоже нет необходимости. Только код усложнится.

А вот если взять таблицу простых чисел, то будет уже что-то
1
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
11.02.2020, 17:07
Цитата Сообщение от valen10 Посмотреть сообщение
А вот если взять таблицу простых чисел, то будет уже что-то
Тут дело такое. Если нужно определить простоту одного какого-то числа, то не стоит и огород городить. А вот если требуется находить простоту многих чисел, тогда да, таблица делу поможет. Хотя для больших чисел имеет смысл и для одного...
В общем, дилемма простая, как весь наш мир "Скорость - Память"
1
 Аватар для andrey_f
608 / 389 / 188
Регистрация: 21.02.2011
Сообщений: 5,165
11.02.2020, 21:06
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cmath>
bool isPrime(int num) {
  if(num > 0){
    if(num == 1){
      return false;
    }
  for(int x = 2; x <= sqrt(num); ++x){
    if(num%x == 0 && x != num){
      return false;
    }
  }
  return true;
  }else{
    return false;
  }
}
0
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
11.02.2020, 21:19
Цитата Сообщение от andreyfreelans Посмотреть сообщение
for(int x = 2; x <= sqrt(num); ++x){
Каждый раз вычислять sqrt при проверки окончания цикла? Побойтесь Бога!
Тогда уж так
C++ Скопировано
1
2
double s = sqrt(num);
for(int x = 2; x <= s; ++x){
Но это вообще плохая практика, привлекать для целочисленных задач типы, выходящие за их пределы....
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
11.02.2020, 22:52
Цитата Сообщение от Байт Посмотреть сообщение
А вот если требуется находить простоту многих чисел, тогда да, таблица делу поможет. Хотя для больших чисел имеет смысл и для одного...
Вот интересно стало, есть ли какое-то практическое применение у способа с перебором делителей, чтобы заниматься его оптимизацией. Студенту сдать лабу и так сойдет. Для больших чисел существуют более специфичные алгоритмы. А нужно ли где-то на практике проверять простоту не очень больших чисел?
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
11.02.2020, 22:57
Байт, разве компиляторы в 2020 не умеют кэшировать значение?
0
11.02.2020, 23:17

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
разве компиляторы в 2020 не умеют кэшировать значение?
В 2020 компиляторы умеют не только кэшировать значения, но и так тоже:
In C++14 you just write «auto auto(auto auto) { auto; }». The compiler infers the rest from context.
Источник xD

0
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,187
12.02.2020, 08:13
Цитата Сообщение от valen10 Посмотреть сообщение
alexu_007, в рамках поставленной задачи не имеет смысла, ИМХО. Останутся числа, кратные 3, 5, 7 и т.д., делить на которые тоже нет необходимости. Только код усложнится.
А вот если взять таблицу простых чисел, то будет уже что-то
C Скопировано
1
2
3
for(int i = 2; i <= sqrt(n); i++)
 
for(int i = 3; i <= sqrt(n); i+=2)
Где тут усложнение? А цикл сокращается ровно в 2 раза.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
12.02.2020, 17:23
Цитата Сообщение от alexu_007 Посмотреть сообщение
Где тут усложнение?
if (n % 2 == 0) ... перед циклом.

Но вопрос немного в другом. Цель такой оптимизации? Ради оптимизации. Сложность как была https://www.cyberforum.ru/cgi-bin/latex.cgi?O(\sqrt n), так и осталась. Если будем проверять маленькие числа, то разница в 2 раза мало влияет на результат, а если большие - не спасет.

Согласен с Вами, оптимизировать можно. Но почему именно в 2 раза? Если пойти и дальше, избавимся от 9, 27, ..., https://www.cyberforum.ru/cgi-bin/latex.cgi?3^k. Затем от степеней 5, 7 и т.д. Не ясно только, когда остановиться. Если продолжить, то придем к описанию таблицы простых чисел. Если сделаем только 2-3 шага, то никуда не уйдем от https://www.cyberforum.ru/cgi-bin/latex.cgi?O(\sqrt n).
1
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,187
12.02.2020, 20:16
Цитата Сообщение от valen10 Посмотреть сообщение
if (n % 2 == 0) ... перед циклом.
Вы это серьёзно? n%2 выполняется один раз, а цикл уменьшается вдвое.

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

Цель такой оптимизации? Ради оптимизации. Сложность как была , так и осталась. Если будем проверять маленькие числа, то разница в 2 раза мало влияет на результат, а если большие - не спасет.
По-любому, ускорение алгоритма почти в 2 раза без каких-либо усилий (только силой интеллекта) есть очень хорошо. Даже если и не нада.
0
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
12.02.2020, 21:42

Не по теме:

alexu_007, вашу бы энергию и убежденность в очевидных вещах - как бы в мирное русло направить?


valen10, вот такая схема вырисовывается. По дороге делений выясняем простоту очередных делителей. И в случае удачи - добавляем их в массив простых. Не знаю, не понимаю пока, даст ли это хоть какой эффект при выяснении для одного числа. Для кучи - даст несомненно. Насколько? Если в разы - это неинтересно. Если на порядок - тогда имеет смысл.
0
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,187
13.02.2020, 06:46
Цитата Сообщение от Байт Посмотреть сообщение
Насколько? Если в разы - это неинтересно.
Индусский код - работает и ладно? Если бы все старались писать так, что-бы работало в целых! 2 раза быстрее - тогда и игры бы не тормозили, и страницы быстрее грузились.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
19.02.2020, 22:52
Цитата Сообщение от Байт Посмотреть сообщение
По дороге делений выясняем простоту очередных делителей
Вот тут не совсем понял, как можно эффективно это сделать. Если каждый новый делитель проверять на простоту тем же алгоритмом, то картина складывается не очень хорошая (могу заблуждаться, не проверял, честно).

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

https://www.cyberforum.ru/cgi-bin/latex.cgi?{{\pi (n)} \over {n / \ln n}} \rightarrow  1 при https://www.cyberforum.ru/cgi-bin/latex.cgi?n \rightarrow  \infty.

Допустим, мы построили уже таблицу простых чисел от 2 до k. Тогда числа, входящие в интервал https://www.cyberforum.ru/cgi-bin/latex.cgi?[2; k] проверим за https://www.cyberforum.ru/cgi-bin/latex.cgi?O({\ln m}), где m - размер таблицы (бинарный поиск), входящие в интервал https://www.cyberforum.ru/cgi-bin/latex.cgi?[k + 1; k^2] - за https://www.cyberforum.ru/cgi-bin/latex.cgi?O({{n} \over {\ln n}}), а дальше - перебор делителей, который благодаря таблице конечно сократится (полагаю, что в разы).

Не по теме:

Математик из меня не очень. Байт, и почему мне кажется, что Вы знаете решение :D
p.s. прошу прощения за столь поздний ответ.

0
Диссидент
Эксперт C
 Аватар для Байт
27710 / 17328 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
19.02.2020, 23:14
Цитата Сообщение от valen10 Посмотреть сообщение
почему мне кажется, что Вы знаете решение
не-а.. Не знаю. Просто пришло в голову, что можно попытаться совместить эти 2 подхода - перебор и решето. Но, имхо, какого-то революционного прорыва это не даст.
Простые числа - задача древняя. Более того - реально востребованная в "промышленности". За нахождение хорошего простого числа можно и слегка пополнить свой тощий кошелек. Так что довольно глупо рассчитывать, что мы с вами откроем тут нечто замечательное. Так, развлечение и размятие шеи, на которой висит голова....
0
732 / 693 / 110
Регистрация: 29.05.2015
Сообщений: 4,187
20.02.2020, 09:43
Программа, демонстрирующая работу 2-х алгоритмов решета эрастофена - простого и только с четными числами. Считает количество простых в заданном диапазоне, их сумму и время работы алгоритма. К сожалению, простой эрастофен крашится при диапазоне более 2,1 млрд, при 4,2 удалось проверить только вторым:
Миниатюры
Функция проверки числа на простоту   Функция проверки числа на простоту  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2020, 09:43
Помогаю со студенческими работами здесь

Написать программу проверки числа на простоту и в противном случае разложения его на простые множители
1) Рандомное задание числа 15 значное 2) Проверка на простоту и если не простое 3) Разложение на простые множетили

Рекурсивная функция: проверка числа на простоту
Логическая функция возвращает True, если ее аргумент — простое число.

Функция проверки делимости числа на 8
Для проверки делимости числа на 8, необходимо, чтобы сумма цифр числа делилась на 8. Написать функцию проверки делимости числа N вводимого...

Функция проверки числа на полный квадрат
Небольшой вопросик: Задание написать функцию проверки на полный квадрат. Проблемма с условием. (например число 5; ch = sqrt(5) ch =...

Рекурсивная функция проверки простого числа
Не могу разобраться !! Как она вставляет в код без рекурсива?! Прошу помощи вставте эту долбанную рекурсивную функцию !! код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер