2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. На страницу Пред.  1 ... 32, 33, 34, 35, 36, 37, 38 ... 46  След.
 
 Re: Поиск простых чисел
Сообщение21.07.2011, 22:08 
Аватара пользователя


21/07/11
4
вот оптимизировал с использованием замечательного битового массива
(миллиард просеял за 195 секунд):

Код:
Dim dt As DateTime = Now
Dim max As ULong = 1000000000UL '1 млрд.
Dim s As ULong = Int(Math.Sqrt(ULong.MaxValue))
Dim b As New BitArray(max + 1)
For f As ULong = 0 To b.Length - 1
    b(f) = True
Next
b(0) = False : b(1) = False
Dim n As New List(Of ULong)
Dim i, ix As ULong
Do
    ix = 0
    For f As ULong = i + 1 To max
        If b(f) Then
            ix = f
            Exit For
        End If
    Next
    If ix = 0 Then Exit Do
    i = ix
    n.Add(i)
    If i <= s Then
        For f As ULong = i ^ 2 To max Step i
            b(f) = False
        Next
    End If
Loop
MsgBox("Найдено простых чисел: " & n.Count & " из " & max & vbCrLf & _
       "Наибольшее простое число: " & n(n.Count - 1) & vbCrLf & _
       "Затраченное время, сек.: " & DateDiff(DateInterval.Second, dt, Now))

кажется тут оптимизировать уже нечего?

-- 21.07.2011, 23:11 --

Droog_Andrey в сообщении #470362 писал(а):
Можно намного быстрее:

http://www.primefan.ru/stuff/pict/benchmark.gif

Замечательные результаты. Даже многопоточность используется. А можно на исходники взглянуть?

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.07.2011, 00:12 
Заслуженный участник


04/05/09
4589
iJoy в сообщении #470359 писал(а):
сдвиги есть типа i = i << 4 (сдвиг на 4 бита влево), но как они тут помогут, если нужно бит n установить в 0?
Вместо Math.Floor(i/8) использовать (i >> 3).
Вместо 2 ^ (f Mod 8) использовать 1<<(f and 7).
Вместо ULong использовать UInteger.
Вместо Math.Sqrt(ULong.MaxValue) >= i использовать max_i >= i, а max_i посчитать один раз (снаружи цикла) как Math.Sqrt(max).

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.07.2011, 00:34 
Аватара пользователя


21/07/11
4
venco в сообщении #470392 писал(а):
Вместо Math.Floor(i/8) использовать (i >> 3).
Вместо 2 ^ (f Mod 8) использовать 1<<(f and 7).
Вместо ULong использовать UInteger.
Вместо Math.Sqrt(ULong.MaxValue) >= i использовать max_i >= i, а max_i посчитать один раз (снаружи цикла) как Math.Sqrt(max).

Спасибо огромное. Такая оптимизация ускоряет алгоритм примерно в 100 раз!

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.07.2011, 06:45 
Заслуженный участник
Аватара пользователя


09/02/09
2092
Минск, Беларусь
iJoy в сообщении #470369 писал(а):
Droog_Andrey в сообщении #470362 писал(а):
Можно намного быстрее:

http://www.primefan.ru/stuff/pict/benchmark.gif

Замечательные результаты. Даже многопоточность используется. А можно на исходники взглянуть?
Версия 3.0 ещё быстрее: http://www.primefan.ru/stuff/pict/benchmark30.gif

А исходники вот тут: http://code.google.com/p/primesieve/

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение02.08.2011, 14:05 
Аватара пользователя


07/07/09
346
Минск
Возвращаясь к первому посту темы и сути обсуждения (кто помнит), то хотелось бы продолжить о сути и поговорить (кто еще есть на форуме).
Разобрался я со сложностями алгоритмов и как они образуются. (Как уже и писал, прошу прощения из-за своего неведения вопроса, ASSA действительно оказалась непригодной не только для больших чисел, но и для нужд криптографии, хотя в виду детерминированности алгоритма, то в теории чисел, я продолжаю считать, что место этому алгоритму есть) Но сейчас о другом.
За этот год, ASSA меня привела к совершенно другому алгоритму генерации простых чисел и одновременно детерминированному тесту простоты (так как есть и доказательство) c полиномиальной сложностью, который превосходит всем известный детерминированный тест AKS.
Требуется рецензия на эту работу, и прошу помощи форумчан, кто является экспертом в этом вопросе и знает суть темы, подсказать к кому конкретно можно обратиться. Рецензия требуется для дальнейшей коммерциализации и практического применения этого алгоритма в криптографии (системы с открытым ключом).

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение03.08.2011, 16:55 


03/08/11
9
Riga
Добрый день, SerjeyMinsk !

я к.ф.-м.н. , специализируюсь по теории чисел.

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

пишите мне в Skype (www.skype.com) aleksm2

Всего доброго!
до встречи

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение14.12.2011, 09:27 


16/08/05
1153
dmd в сообщении #453635 писал(а):
Сумма кубов $a^3+b^3=(a+b)(a^2-ab+b^2)$

Пусть $3|(M-1)$, тогда либо $(a+b):M$, либо $(a^2-ab+b^2):M$,
где $a=3^s$, $s=\frac{M-1}{6p}$ и $b$ - степень двойки.

...

Если допустим $5|(M-1)$, $a^5+b^5=(a + b) (a^4 - a^3 b + a^2 b^2 - a b^3 + b^4)$, то снова два варианта: либо $(a+b):M$, либо $(a^4 - a^3 b + a^2 b^2 - a b^3 + b^4):M$,
где $a=3^s$, $s=\frac{M-1}{10p}$ и $b$ - степень двойки.

Если простое $q|(M-1)$, $a^q+b^q=(a + b) (a^{q-1} - ... + b^{q-1})$, то та же вилка: либо $(a+b):M$, либо $(a^{q-1} - ... + b^{q-1}):M$,
где $a=3^s$, $s=\frac{M-1}{2qp}$ и $b$ - степень двойки.

Кстати, решение квадратного уравнения $a^2-ab+b^2$ по модулю $M$, где $a=3\pmod M$ и $b$ - неизвестное, обязано существовать и без возведения в крутую степень по модулю. Поэтому следующий код тоже работает:

Код:
mtf()=
{
local(M:int);
local(a,t);
forprime(p=2, 5000,
M= (2^p-1):int;
a= Mod(3,M);
t= polrootsmod(a^2 - a*X + X^2, M);
if(#t==2, print(p))
)
};

Тогда, если для большого $p$ получена частичная факторизация $M-1$, то имеет смысл сначала проверить, существует ли решение соответствующего полинома по модулю $M$
Код:
polrootsmod(a^{q-1} - ... + X^{q-1}, M)

где $a=3\pmod M$ и простое $q|(M-1)$

Если не существует, то сразу можно отбраковывать данное $p$.
Правильно ли это?

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение14.12.2011, 13:51 


16/08/05
1153
Видимо этот способ тоже ничего не даст, т.к. решение квадратного уравнения по модулю получается медленнее, чем возведение в степень по модулю.

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение15.12.2011, 12:09 


15/12/05
754
aleksm2
А можно без скайпа сообщить?

(Оффтоп)

не люблю общаться по скайпу

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение19.12.2011, 14:24 


16/08/05
1153

(Оффтоп)

Прошу помощи.
Хотел рассмотреть соответствующие квадратичные вычеты-невычеты по модулю $M$ и запутался. По идее функция символа Кронекера для невычетов должна возвращать $-1$
Код:
mkr()=
{
local(h,M:int);
forprime(p=3, 108,
  M= 2^p-1;
  h= lift(-Mod((M^2+27)/4,M));
  print(p,"    ",kronecker(h,M),"    ",#polrootsmod(x^2 - h,M))
)
};

но она во всех случаях возвращает $1$
Код:
? mkr()
3    1    2
5    1    2
7    1    2
11    1    0
13    1    2
17    1    2
19    1    2
23    1    0
29    1    0
31    1    2
37    1    0
41    1    0
43    1    0
47    1    0
53    1    0
59    1    0
61    1    2
67    1    0
71    1    0
73    1    0
79    1    0
83    1    0
89    1    2
97    1    0
101    1    0
103    1    0
107    1    2

Почему так?

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение19.12.2011, 14:43 
Модератор
Аватара пользователя


11/01/06
5710
dmd в сообщении #517211 писал(а):
Хотел рассмотреть соответствующие квадратичные вычеты-невычеты по модулю $M$ и запутался. По идее функция символа Кронекера для невычетов должна возвращать $-1$

Только по простым модулям. Для составных модулей она для некоторых невычетов может возвращать 1. Подробности - см. в Википедии.
Если хочется знать наверняка, то используйте функцию issquare(), только учтите, что она будет факторизовать модуль.

Кроме того, в "h= lift(-Mod((M^2+27)/4,M));" можно смело выкинуть "M^2" так как это ноль по модулю вашего нечетного M.

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.12.2011, 03:45 


30/08/11
4
По теме. Свежая новость. В Израиле, г.Реховот, определён алгоритм построения ряда простых чисел. Проверка алгоритма на построение рядов из 100000 и 1000000 чисел прошла успешно. Ошибок не было. Ряды строились от произвольно заданных простых чисел. Например 79 и следующие за ним 100000 чисел, 193 и следующие за ним 1000000 чисел. Кроме этого, насколько известно, алгоритм так прост, что прописывается в течение 2-х минут в Microsoft XL и мгновенно выдаёт ряд чисел в пределах разрешающей способности программы. Автор из бывшего союза. Имеет он отношение или нет к известному институту Вайцмана, что в г.Реховот, - инфы нет.
Будут ещё новости, - отпишусь.

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.12.2011, 07:31 
Заслуженный участник


08/04/08
8562
Дайте ссылку лучше. Нагуглить новость не могу :evil:

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.12.2011, 12:34 
Заслуженный участник
Аватара пользователя


23/07/05
17991
Москва
magistr07 в сообщении #518332 писал(а):
определён алгоритм построения ряда простых чисел
Ничего не понял. Какого ряда?

 Профиль  
                  
 
 Re: Поиск простых чисел
Сообщение22.12.2011, 14:05 
Заслуженный участник
Аватара пользователя


21/12/05
5932
Новосибирск
И в самом деле, кому нужен алгоритм построения 100000 простых чисел вслед за любым простым, если достаточно указать одно простое вслед за любым?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 682 ]  На страницу Пред.  1 ... 32, 33, 34, 35, 36, 37, 38 ... 46  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: dgwuqtj


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group