Имя: Пароль:
IT
 
быстрая генерация простых чисел
,
0 viktorovichvadim
 
30.01.14
23:29
Коллеги, привет. Может кто разрабатывал генераторы простых чисел? Какие есть быстрые алгоритмы, сопоставимые/более быстрые чем решето Аткина?
Несколько дней назад разработал новый алгоритм генерации простых чисел, достаточно элементарный, и пока только на 1С. Но работает в 4.5 раза быстрее чем решето Аткина в реализации IamAlexy (http://infostart.ru/projects/5955/) Генерирует до 15 млн. простые за 40 сек, в то время как решето Аткина в реализации IamAlexy - за 187 секунд. Мой алгорим -тоже решето, но имеет мало общего с Эратосфена, Аткина и пр. В сети описание чего-то похожего пока не обнаружил. Хочу перекодить на Java, посмотреть на больших числах, т.к. в 1С дальше 15 млн. уже нехватка памяти.
1 IamAlexy
 
30.01.14
23:31
(0) :)

ты с 2009 г. не спал и не ел, все работал чтобы победить мою обработку?

похвально похвально..
надеюсь ты ее скачал и запустил на своем компе а не смотрел на циферки со скриншотов?
2 viktorovichvadim
 
30.01.14
23:39
(1) спал и ел, работал. задачка интересная, вот и вспомнил. обработку запускал на своем компе и твою и свою. понятно, что твой код взят с википедии, он упрощен для демонстрации идеи решета Аткина. надо брать реальную реализацию и сравнивать с ней.
3 NS
 
30.01.14
23:47
Вроде нет быстрее решета Аткина.
4 viktorovichvadim
 
30.01.14
23:59
"It generates the 50847534 primes up to 1000000000 in just 8 seconds on a Pentium II-350". (Это про решето Аткина)

Вот похоже, какой-то ориентир в первом приближении. Если дойду до миллиарда за сопоставимое время, можно будет прорабатывать тему более конкретно.
5 Злопчинский
 
31.01.14
00:06
ну-ну...
6 Злопчинский
 
31.01.14
00:07
если простые числа расположить в полярной ситеме координат - почему то прослеживается группирование.. ане равномерная размазня.. - так пишут британские учоные
7 sda553
 
31.01.14
00:34
Ты просто скажи какая сложность алгоритма. У Аткина N/loglogN
А то может у тебя линейная, просто на первых миллионах дает хороший результат, а асимптотически фигня будет
8 NS
 
31.01.14
00:42
и желательно сколько памяти тратит.
9 Asmody
 
31.01.14
01:24
(0) [разработал новый алгоритм генерации простых чисел] - ООО! Патентуй скорей! Это как минимум Нобелевка! Жаль только, что Нобелевку по математике не дают
10 NS
 
31.01.14
10:26
Не нобелевка конечно, но если лучше чем (7), то в википедию впишут.
11 NikVars
 
31.01.14
10:50
Некогда не догадывался 1С использовать для такой ерунды.
Не глумитесь! 1С исключительно для зарабатывания денег!
12 Neg
 
31.01.14
10:57
(0) а зачем тебе это нужно?
13 sda553
 
31.01.14
11:00
(12) Это все равно, что у Колумба, отплывающего спросить "Зачем тебе это нужно?"
Открыть новые алгоритмы.
Назвать их своим именем.
Прославиться.
14 Зойч
 
31.01.14
11:02
(13) новый алгоритм генерации простых чисел????
Тут конуренция поболее будет, чем если индусов пустить 1сить
15 Neg
 
31.01.14
11:02
(13) Ну если так, то тогда я очень рад, тому, что нахожусь на одном форуме с таким человеком, даже не общаясь с ним.
16 Neg
 
31.01.14
11:04
(14) Главное 3-й пункт, а как не самое главное. :)
17 sda553
 
31.01.14
11:04
(14) Наоборот, в генерации простых чисел, кажется, уже все возможные алгоритмы открыты и ничего нового не появляется.
(15) Он еще не доказал, что его алгоритм чем то новый и чем то производительный.
18 Ненавижу 1С
 
гуру
31.01.14
11:06
мы даже не уверены, что его алгоритм правильный
19 Зойч
 
31.01.14
11:07
(17) ну это я и имел ввиду
20 sda553
 
01.02.14
11:33
Что то затих автор
21 viktorovichvadim
 
01.02.14
22:01
(20) времени не сильно много. переписал свой алгоритм на java, рядом для сравнения - упрощенную реализацию решета Аткина с Википедии (по сути кода-примерно то же, что и у IamAlexy на 1С: http://infostart.ru/projects/5955/). Все равно удалось сравнить на простых до 22 000 000. Дальше - ограничение по типу int. Алгоритм обращается на индексы массива, а значение индекса не может быть типом long (а только этот тип представляет достаточно большие числа). Надо модифицировать реализацию алгоритма.
Если говорить о результате сравнения для простых до 22 млн.: - решето Аткина 936 мск, мой алгоритм 728 мск. Выводы делать преждевременно на таких числах. Так что буду копать дальше.
22 NS
 
01.02.14
23:50
(21) Ты странно пытаешься делать. Нужно не скорость измерять, а понять сложность алгоритма, и требуемую память.
23 sda553
 
02.02.14
00:18
(21) Ты не туда копаешь.
Сравнивать надо не конкретные времена на конкретных количествах простых, а сложность алгоритма. Если у тебя линейная сложность О(N), то Аткин может и будет вначале отставать, но через сколько то миллиардов, рано или поздно догонит и перегонит
24 viktorovichvadim
 
02.02.14
00:21
(23) спасибо за совет. есть ли какая-то методика оценки сложности алгоритма?
25 sda553
 
02.02.14
00:22
(21) Если не можешь сам посчитать сложность, то просто хотя бы составь график времени по точкам от 1 до 22 млн. Что получается? Прямая линия, кривизна, выпукло, вогнуто. И то же самое составь такой же график для Аткина и посмотри, что приблизительно получается на бесконечности - если кривые продолжить
26 sda553
 
02.02.14
00:24
Если прямая линия, то считается сложность линейная O(N)
У Аткина сложность O(N)/loglog(N) т.е. если глянешь график, то, чем больше N  тем Аткин эффективнее
27 viktorovichvadim
 
02.02.14
00:25
(25) на отрезке, который я проверял, и аткин и мой показывают линейную зависимость.
28 sda553
 
02.02.14
00:34
(27) Упрощенный Аткин линейный. N/loglogN получается после усложнения, который скорее всего Asmody не делал.
Если у тебя алгоритм линейный, то это как бы не очень, достижение. Линейных алгоритмов поиска простых - куча.
29 NS
 
02.02.14
00:36
N/loglogN алгоритмов куча. Аткин замечателен меньшими требованиями к памяти.
30 viktorovichvadim
 
02.02.14
00:40
так что, если один алгоритм работает в 10 раз быстрее другого при одинаковой сложности, то это и не считается достижением?
31 sda553
 
02.02.14
00:44
(30) Нет, т.к. их можно выровнять проведя хорошую оптимизацию кода или собрав специальную аппаратуру, которая может быстро проводить требуемое повторяющееся в цикле вычисление. А сложность алгоритма подобными мерами не изменишь.
Аткин не линейный.
32 NS
 
02.02.14
00:46
(30) Если твой алгоритм линейный, то как бы ты его не ускорил - никакой практической ценности он не представляет.
33 NS
 
02.02.14
00:47
В редких случаях, когда константа намного лучше в алгоритме с худшей сложностью, он всё-таки применяется на практике. Но для этого константа должна быть реально лучше.
34 viktorovichvadim
 
02.02.14
00:51
(33) похоже, нужно применить какую-нибудь адекватную методику оценки сложности алгоритма, потом делать выводы. спасибо за внимание к вопросу.
35 wertyu
 
02.02.14
00:56
(33) для затравки
http://habrahabr.ru/post/104219/
36 wertyu
 
02.02.14
00:57
(35) к (34)
37 NS
 
02.02.14
01:11
Вообще вот так просто взять и оценить сложность хитрого алгоритма не выйдет. Этому учат. Долго и упорно.
Могу посоветовать книгу Кормена "Алгоритмы, построение и анализ"
38 wertyu
 
02.02.14
01:14
(37) это бесспорно, потому и написал "для затравки"
39 МишельЛагранж
 
02.02.14
03:14
Ну вот, не произошло революции, снова и снова...
Только я не понял - на что рассчитывал ТС, обогнать алгоритм Аткина, не предложив никакой нелинейной альтернативы?
40 SUA
 
03.02.14
11:43
тут кроме вброса ничего не произошло - даже код не выложен
41 kiruha
 
03.02.14
11:53
(30)
Ты должен победить
O(N)/loglog(N)

множители-константы не считаются

Например добейся
O(N)/log(N)