2014 dxdy logo

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

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


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Нахождение всех простых чисел от 1 до n, алгоритм
Сообщение29.07.2008, 20:19 
Аватара пользователя


23/01/08
565
Начальная задача такова: найти простые числа до $n$ за наименьшее время.

Можно воспользоваться обычным перебором, но хочется применить математический аппарат и оптимизировать этот перебор, например, может быть, есть какие-нибудь закономерности частоты появления или еще какие-нибудь свойства простых чисел, которые могут здесь пригодиться?
Собственно, хочется разобраться в математической части этой задачи.

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


18/05/06
13438
с Территории
Алгоритм называется "решето Эратосфена", и я не представляю, что может быть быстрее, если речь идёт об интервале (1,n).
Если не с единицы, то могут быть нюансы.

 Профиль  
                  
 
 
Сообщение29.07.2008, 20:47 
Заслуженный участник


09/02/06
4401
Москва
Когда ищется в полном интервале от 1 до n, не существует лучшего алгоритма чем Решето.
Запишем первое простое $p_0=2$ и запишем все нечётные (присваиваем бинарной - битовой переменной на этих числах f(k)=1).
Берём первое ещё не проверенное число, если f(p)=1 число простое, иначе пока не нашли проверяем дальше. Если $p^2<n$, то числам начиная от $k=p^2$ присваем $while(k<=n), \ f(k)=0,k+=2p$. Если $p^2>n$ то дальше не требуется вычеркивать и все числа $k,f(k)=1$ простые.

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


07/03/06
1898
Москва
Есть и альтернативные экзотические способы. Рассмотрим таблицу:
Код:
4  7   10  13  16  19...
7  12  17  22  27  32...
10 17  24  31  38  45...
13 22  31  40  49  58...
16 27  38  49  60  71...
19 32  45  58  71  84...

Если число $n$ встречается в этой таблице, то число $2n+1$ - составное, в противном случае число $2n+1$ - простое.
Причем в этой таблице из простых не встречаются только простые числа Софи Жермен.

 Профиль  
                  
 
 
Сообщение29.07.2008, 22:25 


08/05/08
954
MSK
Руст писал(а):
Когда ищется в полном интервале от 1 до n, не существует лучшего алгоритма чем Решето.

Как доказать это утверждение?

 Профиль  
                  
 
 
Сообщение30.07.2008, 00:51 
Модератор
Аватара пользователя


11/01/06
5710
juna писал(а):
Есть и альтернативные экзотические способы. Рассмотрим таблицу:
Код:
4  7   10  13  16  19...
7  12  17  22  27  32...
10 17  24  31  38  45...
13 22  31  40  49  58...
16 27  38  49  60  71...
19 32  45  58  71  84...

Если число $n$ встречается в этой таблице, то число $2n+1$ - составное, в противном случае число $2n+1$ - простое.

Это т.н. решето Сундарама.

Добавлено спустя 25 минут 2 секунды:

Вот, кстати, раритет - самая первая публикация об этом решете 1934 года. Автор публикации - учитель Сундарама - пишет, что тот провалил какие-то промежуточные экзамены, но тем не менее придумал интересный метод просеивания простых чисел.

V. Ramaswami Aiyar (1934). "Sundaram's Sieve for Prime Numbers". The Mathematics Student 2: 73.

Изображение

Из малоизвестного индийского журнала The Mathematics Student, информация об этом решете была перепечатана в 1941 году в более известном научно-популярном журнале Scripta Mathematica, откуда она потом в 1950-х годах попала в книжку Кордемского Математическая смекалка. Именно эта книга способствовала дальнейшей популяризации этого решета в СССР и за его пределами (книга переводилась как минимум на немецкий язык).

 Профиль  
                  
 
 
Сообщение30.07.2008, 09:38 


23/01/07
3497
Новосибирск
Еще одно решето до кучи... (с) :)

Имеется линейка с нанесенными делениями натуральных чисел.
Параллельно первой линейке обратным концом дискретно по делениям выдвигаем линейку с нанесенными на ней делениями квадратов натуральных чисел $ k_i^2 $.
Нечетные деления первой линейки, совпадающие с делениями второй, отмечаем меткой.
Деления (натуральные числа) первой линейки, меньшие $ 2k_i - 1 $, имеющие одну метку, "отсеиваем" в список простых чисел.
В окончательном списке единичку поменяем на двойку.

 Профиль  
                  
 
 
Сообщение30.07.2008, 17:31 
Аватара пользователя


23/01/08
565
Спасибо, буду знать. Возник вот еще вопрос: известны ли кому-нибудь алгоритм для проверки числа на простоту, а также алгоритм разложения на простые множители? (первый, конечно, следует из второго, но вдруг как-то можно ускорить).

Руст, интересно, какая сложность у этого алгоритма (решето Эратосфена)? Линейная?

 Профиль  
                  
 
 
Сообщение30.07.2008, 17:53 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Кстати, есть еще алгоритм решета Аткина : http://ru.wikipedia.org/wiki/%D0%A0%D0% ... 0%BD%D0%B0
Spook в сообщении #136356 писал(а):
Возник вот еще вопрос: известны ли кому-нибудь алгоритм для проверки числа на простоту, а также алгоритм разложения на простые множители? (первый, конечно, следует из второго, но вдруг как-то можно ускорить).
Они описаны, например, вот здесь: Василенко О.Н. — Теоретико-числовые алгоритмы в криптографии

 Профиль  
                  
 
 
Сообщение30.07.2008, 18:15 
Заслуженный участник


09/02/06
4401
Москва
Spook писал(а):
Спасибо, буду знать. Возник вот еще вопрос: известны ли кому-нибудь алгоритм для проверки числа на простоту, а также алгоритм разложения на простые множители? (первый, конечно, следует из второго, но вдруг как-то можно ускорить).

Руст, интересно, какая сложность у этого алгоритма (решето Эратосфена)? Линейная?

Сложность алгоритма $O(nlnln(n))$.
Первый гораздо проще имеются доказанные полиномиальные (относительно ln(n)) алгоритмы. Однако второй вряд ли имеет полиномиальную сложность для общего числа.

 Профиль  
                  
 
 
Сообщение30.07.2008, 19:36 
Аватара пользователя


23/01/08
565
Brukvalub,Руст, спасибо.

Кто-нибудь может посоветовать литературу по таким алгоритмам (да и вообще, по алгоритмам: что лучше почитать), особенно интересно оценивание сложности.

 Профиль  
                  
 
 
Сообщение30.07.2008, 20:33 
Заслуженный участник
Аватара пользователя


22/11/06
1096
Одесса, ОНУ ИМЭМ
Цитата:
(да и вообще, по алгоритмам: что лучше почитать)

По анализу алгоритмов, наверное, можно читать "Искусство программирования" Кнута. Там есть и глава про проверку на простоту.

 Профиль  
                  
 
 
Сообщение30.07.2008, 21:58 
Заслуженный участник
Аватара пользователя


23/07/05
18004
Москва
Spook в сообщении #136356 писал(а):
Возник вот еще вопрос: известны ли кому-нибудь алгоритм для проверки числа на простоту


http://primes.utm.edu/

 Профиль  
                  
 
 
Сообщение30.07.2008, 22:09 
Модератор
Аватара пользователя


11/01/06
5710
Тест Миллера-Рабина и далее по ссылкам...

 Профиль  
                  
 
 
Сообщение30.07.2008, 22:22 
Заслуженный участник


09/02/06
4401
Москва
Устаревшиеся сведения. При выполнении обобщённой гипотезы Римана достаточно перебирать простые а от 2 до $2(\ln m)^2$. Имеются ещё достаточные количества проверок вплоть до $m=10^{15}$, что удобно при использовании не очень больших простых.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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