![]() |
||||||||||||||||
1 | ||||||||||||||||
Быстрая проверка натурального числа на простоту29.09.2012, 21:35. Показов 137014. Ответов 113
Метки нет Все метки)
(
Часто возникает задача проверки натурального числа на простоту. При этом имеются вероятностные и детерминированные методы проверки. Здесь рассматриваются только детерминированные алгоритмы, дающие 100% ответ на вопрос о простоте.
Хорошо известно такое утверждение: если натуральное число n>1 не делится ни на одно простое число, не превосходящее
33
|
|
29.09.2012, 21:35 | |
Ответы с готовыми решениями:
113
Проверка на простоту числа Проверка числа на простоту Проверка числа на простоту
|
Asm♥/C++/Delphi/Py/PHP/Go
|
||||||||||||||||
04.03.2019, 17:41 | 101 | |||||||||||||||
Во-первых, это слишком медленно.
Во-вторых, зачем использовать 1129*2 = 2258 байт памяти, когда можно 10000/8/2 = 625 ? ![]() Для этого нужно создать битовый набор, в котором отмечать простые числа как 1, составные - как 0. Разумеется, только для нечётных чисел. А вообще, по теме welcome сюда: https://www.cyberforum.ru/blog... g5712.html ![]() Финальный код (он же тут в последнем спойлере) похож на тот, что в шапке этого топика (работает с той же скоростью). Есть ещё такой вариант (наиболее быстрый из более или менее адекватных; на 25% быстрее выложенного в статье или того, что в шапке этого топика):
Вариант проще
Ещё проще (примерно как в шапке этого топика, скорость та же)
0
|
Asm♥/C++/Delphi/Py/PHP/Go
|
|
04.03.2019, 19:39 | 107 |
Да, я понял. Просто сейчас нужно 10 тыс, а завтра понадобится 10 млн. Зачем заново переписывать функцию, когда можно сразу сделать оптимально и на все случаи жизни, что называется?
![]()
0
|
Диссидент
![]() 27697 / 17314 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
04.03.2019, 23:40 | 108 |
Все это копеечки, уважаемый. Реально задачу нахождения простых чисел интересуют штуки порядка 101010. Или больше. И тут даже есть возможность весьма приличную денежку заработать. А эти улучшения на 2 процента... Ну, как развлечения досужего ума, это все неплохо...
![]() Добавлено через 30 минут Jin X, вы лучше на решето Аткина посмотрите. Я, по правде, в нем так и не разобрался. Но говорят, оно дает выигрыш на порядок. И математика там симпатичная, не шибко заумная...
0
|
307 / 288 / 116
Регистрация: 23.01.2018
Сообщений: 933
|
|
05.03.2019, 07:25 | 109 |
Если нужно проверять на простоту числа до 10000, то проще всего тупо их все во множество положить.
![]()
0
|
Asm♥/C++/Delphi/Py/PHP/Go
|
|
05.03.2019, 15:46 | 110 |
Это в планах.
Кстати, интересует вопрос. Что быстрее: решето Аткина или Эратосфена? Добавлено через 1 минуту Опечатка, 11 тут не будет ![]() И лучше всё же unsigned int , чем unsigned long (иначе на Linux 64 тормозить будет).
0
|
Asm♥/C++/Delphi/Py/PHP/Go
|
|
05.03.2019, 20:40 | 112 |
Уверены?
На Linux 64 long имеет размер 8 байт, а не 4, как на винде. Уж не знаю, почему такая разница в скорости (раз система 64-битная), но к примеру, на tio.run разница в 2 раза: unsigned int и unsigned long
0
|
609 / 623 / 98
Регистрация: 29.05.2015
Сообщений: 3,841
|
|
28.05.2020, 22:35 | 113 |
Нехилый алгоритм, хоть и непонятный. Работает в 2.3 раза быстрее, чем простым делением.
0
|
Диссидент
![]() 27697 / 17314 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
|
||||||
12.06.2020, 10:54 | 114 | |||||
Вот такой код, решающий немного другую задачу. А именно, Найти K-е простое число. По ходу находятся все первые K простых чисел
Конечно, для определения простоты конкретного числа, этот подход не быстр. Его модификации можно предложить, когда требуется определить простоту множества чисел. С расширением вектора primes и двоичным поиском. Но вот эффективно применить его к анализу конкретного числа не получается... ![]()
0
|
12.06.2020, 10:54 | |
12.06.2020, 10:54 | |
Помогаю со студенческими работами здесь
114
Проверка числа на простоту Проверка числа на простоту Проверка числа на простоту
Проверка числа на простоту
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |