быстрая генерация простых чисел #696810


#0 by viktorovichvadim
Коллеги, привет. Может кто разрабатывал генераторы простых чисел? Какие есть быстрые алгоритмы, сопоставимые/более быстрые чем решето Аткина? Несколько дней назад разработал новый алгоритм генерации простых чисел, достаточно элементарный, и пока только на 1С. Но работает в 4.5 раза быстрее чем решето Аткина в реализации IamAlexy Генерирует до 15 млн. простые за 40 сек, в то время как решето Аткина в реализации IamAlexy - за 187 секунд. Мой алгорим -тоже решето, но имеет мало общего с Эратосфена, Аткина и пр. В сети описание чего-то похожего пока не обнаружил. Хочу перекодить на Java, посмотреть на больших числах, т.к. в 1С дальше 15 млн. уже нехватка памяти.
#1 by IamAlexy
:) ты с 2009 г. не спал и не ел, все работал чтобы победить мою обработку? похвально похвально.. надеюсь ты ее скачал и запустил на своем компе а не смотрел на циферки со скриншотов?
#2 by viktorovichvadim
спал и ел, работал. задачка интересная, вот и вспомнил. обработку запускал на своем компе и твою и свою. понятно, что твой код взят с википедии, он упрощен для демонстрации идеи решета Аткина. надо брать реальную реализацию и сравнивать с ней.
#3 by NS
Вроде нет быстрее решета Аткина.
#4 by viktorovichvadim
"It generates the 50847534 primes up to 1000000000 in just 8 seconds on a Pentium II-350". (Это про решето Аткина) Вот похоже, какой-то ориентир в первом приближении. Если дойду до миллиарда за сопоставимое время, можно будет прорабатывать тему более конкретно.
#5 by Злопчинский
ну-ну...
#6 by Злопчинский
если простые числа расположить в полярной ситеме координат - почему то прослеживается группирование.. ане равномерная размазня.. - так пишут британские учоные
#7 by sda553
Ты просто скажи какая сложность алгоритма. У Аткина N/loglogN А то может у тебя линейная, просто на первых миллионах дает хороший результат, а асимптотически фигня будет
#8 by NS
и желательно сколько памяти тратит.
#9 by Asmody
[разработал новый алгоритм генерации простых чисел] - ООО! Патентуй скорей! Это как минимум Нобелевка! Жаль только, что Нобелевку по математике не дают
#10 by NS
Не нобелевка конечно, но если лучше чем , то в википедию впишут.
#11 by NikVars
Некогда не догадывался 1С использовать для такой ерунды. Не глумитесь! 1С исключительно для зарабатывания денег!
#12 by Neg
а зачем тебе это нужно?
#13 by sda553
Это все равно, что у Колумба, отплывающего спросить "Зачем тебе это нужно?" Открыть новые алгоритмы. Назвать их своим именем. Прославиться.
#14 by Зойч
новый алгоритм генерации простых чисел???? Тут конуренция поболее будет, чем если индусов пустить 1сить
#15 by Neg
Ну если так, то тогда я очень рад, тому, что нахожусь на одном форуме с таким человеком, даже не общаясь с ним.
#16 by Neg
Главное 3-й пункт, а как не самое главное. :)
#17 by sda553
Наоборот, в генерации простых чисел, кажется, уже все возможные алгоритмы открыты и ничего нового не появляется. Он еще не доказал, что его алгоритм чем то новый и чем то производительный.
#18 by Ненавижу 1С
мы даже не уверены, что его алгоритм правильный
#19 by Зойч
ну это я и имел ввиду
#20 by sda553
Что то затих автор
#21 by viktorovichvadim
времени не сильно много. переписал свой алгоритм на java, рядом для сравнения - упрощенную реализацию решета Аткина с Википедии (по сути кода-примерно то же, что и у IamAlexy на 1С: ). Все равно удалось сравнить на простых до 22 000 000. Дальше - ограничение по типу int. Алгоритм обращается на индексы массива, а значение индекса не может быть типом long (а только этот тип представляет достаточно большие числа). Надо модифицировать реализацию алгоритма. Если говорить о результате сравнения для простых до 22 млн.: - решето Аткина 936 мск, мой алгоритм 728 мск. Выводы делать преждевременно на таких числах. Так что буду копать дальше.
#22 by NS
Ты странно пытаешься делать. Нужно не скорость измерять, а понять сложность алгоритма, и требуемую память.
#23 by sda553
Ты не туда копаешь. Сравнивать надо не конкретные времена на конкретных количествах простых, а сложность алгоритма. Если у тебя линейная сложность О(N), то Аткин может и будет вначале отставать, но через сколько то миллиардов, рано или поздно догонит и перегонит
#24 by viktorovichvadim
спасибо за совет. есть ли какая-то методика оценки сложности алгоритма?
#25 by sda553
Если не можешь сам посчитать сложность, то просто хотя бы составь график времени по точкам от 1 до 22 млн. Что получается? Прямая линия, кривизна, выпукло, вогнуто. И то же самое составь такой же график для Аткина и посмотри, что приблизительно получается на бесконечности - если кривые продолжить
#26 by sda553
Если прямая линия, то считается сложность линейная O(N) У Аткина сложность O(N)/loglog(N) т.е. если глянешь график, то, чем больше N  тем Аткин эффективнее
#27 by viktorovichvadim
на отрезке, который я проверял, и аткин и мой показывают линейную зависимость.
#28 by sda553
Упрощенный Аткин линейный. N/loglogN получается после усложнения, который скорее всего Asmody не делал. Если у тебя алгоритм линейный, то это как бы не очень, достижение. Линейных алгоритмов поиска простых - куча.
#29 by NS
N/loglogN алгоритмов куча. Аткин замечателен меньшими требованиями к памяти.
#30 by viktorovichvadim
так что, если один алгоритм работает в 10 раз быстрее другого при одинаковой сложности, то это и не считается достижением?
#31 by sda553
Нет, т.к. их можно выровнять проведя хорошую оптимизацию кода или собрав специальную аппаратуру, которая может быстро проводить требуемое повторяющееся в цикле вычисление. А сложность алгоритма подобными мерами не изменишь. Аткин не линейный.
#32 by NS
Если твой алгоритм линейный, то как бы ты его не ускорил - никакой практической ценности он не представляет.
#33 by NS
В редких случаях, когда константа намного лучше в алгоритме с худшей сложностью, он всё-таки применяется на практике. Но для этого константа должна быть реально лучше.
#34 by viktorovichvadim
похоже, нужно применить какую-нибудь адекватную методику оценки сложности алгоритма, потом делать выводы. спасибо за внимание к вопросу.
#35 by wertyu
для затравки
#36 by wertyu
к
#37 by NS
Вообще вот так просто взять и оценить сложность хитрого алгоритма не выйдет. Этому учат. Долго и упорно. Могу посоветовать книгу Кормена "Алгоритмы, построение и анализ"
#38 by wertyu
это бесспорно, потому и написал "для затравки"
#39 by МишельЛагранж
Ну вот, не произошло революции, снова и снова... Только я не понял - на что рассчитывал ТС, обогнать алгоритм Аткина, не предложив никакой нелинейной альтернативы?
#40 by SUA
тут кроме вброса ничего не произошло - даже код не выложен
#41 by kiruha
Ты должен победить O(N)/loglog(N) множители-константы не считаются Например добейся O(N)/log(N)
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С