Метод эратосфена – Решето Эратосфена, попытка минимизировать память / Habr

Математик оптимизировал решето Эратосфена, чтобы искать простые числа с меньшим расходом памяти


38-летний перуанский математик Харальд Хельфготт три года назад доказал тернарную гипотезу Гольдбаха, а сейчас сумел оптимизировать компьютерный алгоритм для расчёта решета Эратосфена. Фото: Matías Loewy

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

Суть понятна из названия. Решето Эратосфена означает поиск простых чисел методом исключения. Берём список чисел, исключаем из него все составные числа — и получаем список простых чисел, словно просеяв список через решето.

В виде алгоритма решето Эратосфена формализуется следующим образом:

  1. Выписать подряд все целые числа от двух до n (2, 3, 4, …, n).
  2. Пусть переменная p изначально равна двум — первому простому числу.
  3. Зачеркнуть в списке числа от 2p до n считая шагами по p (это будут числа кратные p: 2p, 3p, 4p, …).
  4. Найти первое незачёркнутое число в списке, большее чем p, и присвоить значению переменной p это число.
  5. Повторять шаги 3 и 4, пока возможно.


После выполнения этой операции незачёркнутыми в списке остаются только простые числа.

Очевидно, что компьютерная реализация решета Эратосфена требует большого объёма памяти. Так оно и было, пока своё решение проблемы не предложил 38-летний перуанский математик Харальд Хельфготт.

Харальд Хельфготт


Харальд Хельфготт привлёк всеобщее внимание в 2013 году, когда ему удалось решить тернарную проблему Гольдбаха. Тернарная проблема Гольдбаха — более слабое утверждение основной бинарной проблемы Гольдбаха — одной из самых известных открытых математических проблем, которая до сих пор остаётся нерешённой. Это утверждение о том, что любое чётное число, начиная с 4, можно представить в виде суммы двух простых чисел.

Тернарная гипотеза Гольдбаха напрямую следует из бинарной гипотезы. Тернарная гипотеза утверждает, что любое нечётное число, начиная с 7, можно представить в виде суммы трёх простых чисел. Эта гипотеза была доказана для чисел от N до бесконечности Иваном Виноградовым в 1937 году, за что он получил Сталинскую премию и звание Героя Социалистического Труда. Советские математики думали, что Виноградов доказал гипотезу для всех чисел, но на самом деле позже выяснилось, что нижняя граница N в работе Виноградова составляет 10

6 846 168.

Перуанский математик Харальд Хельфготт сумел окончательно доказать эту гипотезу, снизив границу N до приемлемого числа 1029, а все остальные числа проверили на суперкомпьютере. Его доказательство опубликовано в журнале Science 24 мая 2013 года (doi: 10.1126/science.340.6135.913). Оно подтверждено другими квалифицированными математиками, способными понять доказательство, например, Теренсом Тао.

Сейчас талантливый математик Харальд Хельфготт, чьи предки происходят из Черновицкой области, направил свои усилия на ещё одну важную задачу современной науки — оптимизацию поиска простых чисел. Ему удалось предложить улучшенный вариант решётки Эратосфена — метода поиска простых чисел, сформулированного примерно в 240 г до н.э. Новый вариант в компьютерной реализации требует меньше оперативной памяти, что означает меньший объём подкачки страниц из виртуальной памяти — следовательно, процесс существенно ускоряется.

«Как и многие другие 10-летние дети, я изучал решето Эратосфена в начальной школе», — говорит Харальд Хельфготт, который сейчас работает в Национальном центре научных исследований Франции и Гёттингенском университете.

Харальд признался, что начал думать «даже слишком много» о решётке Эратосфена ещё во время работы над тернарной проблемой Гольдбаха. В частности, об объёме данных в памяти. Он понимал, что именно ограниченный объём памяти является бутылочным горлышком, которое снижает максимально возможную скорость вычислений в данном случае.

Специалисты говорят, что эффективность алгоритма определяется двумя факторами:

  1. Количество операций на один бит входных данных.
  2. Количество бит в памяти во время выполнения инструкций.

По количеству операций на бит решётка Эратосфена относительно эффективна. Оно растёт пропорционально размеру интервала от 1 до N. А вот если посмотреть, что нужно хранить в памяти для каждого шага алгоритма на больших интервалах, то ни о какой эффективности не идёт и речи.

Оптимизация решета Эратосфена


Для оптимизации компьютерного алгоритма решета Эратосфена математик применил вариант того же метода, который использовал при работе над тернарной проблемой Гольдбаха. Речь идёт о круговом методе Харди-Литтлвуда. Том самом методе, который в начале прошлого века великолепно усовершенствовал математик Иван Виноградов, в результате чего почти сумел доказать гипотезу Гольдбаха.

Согласно методу Харди-Литтлвуда, решение задачи задаётся интегралом по единичной окружности от некоторого ряда. Этот интеграл разбивается на два, один из которых оценивается, а про другой доказывается его относительная малость. Составляющие первую сумму называются большими дугами, а вторую — малыми.

Сам математик объясняет метод следующим образом:

«Анализ количества решений производится, по сути, посредством преобразования Фурье. Представьте себе, что простые числа — это звуки на некоторой записи, скажем, в моменты времени 2, 3, 5, 7, 11 и так далее микросекунд. После преобразования у вас получается своего рода шум, в котором вы пытаетесь услышать какие-то ноты. Среди них есть такие, которые слышны достаточно хорошо, — это и есть большие дуги. А есть частоты, которые просто являются шумовыми фрагментами, — это малые дуги. Весь метод распадается на две части — выделение нот и доказательство того, что остальное на самом деле шум. За первую часть метода отвечают оценки на большие дуги, за второй — на малые».

На основе метода Харди-Литтлвуда учёный разработал подход, который позволяет вместо объёма оперативной памяти N использовать объём памяти ∛N (кубический корень из N).

Образно говоря, вместо 1 гигабайта памяти, т.е. 109 байт (не путать с гибибайтом 230) нужен всего лишь 1 килобайт (∛109 = 103 байт).

Гигабайт и килобайт — большая разница, согласитесь.

Такая оптимизация в каком-то смысле стала побочным эффектом решения проблемы Гольдбаха.

Тезисы своей работы Харальд Хельфготт представил на 21-м Латиноамериканском коллоквиуме по алгебре в Буэнос-Айресе 25-29 июля 2016 года, а также на мероприятии Sinapsis 2016 в Париже — неформальной встрече перуанских учёных, проживающих в Европе.

Есть разные алгоритмы для поиска простых чисел, но Хельфготт обращает внимание, что решето Эратосфена имеет важное качество — оно совместимо с другими математическими операциями, такими как факторизация, а ведь именно на факторизации (разложении больших чисел на простые множители) базируется криптография. «Факторизация стала ключевым элементом современной цивилизации», — констатирует Хельфготт.

habr.com

Эратосфена решето — это… Что такое Эратосфена решето?


Эратосфена решето

Решето́ Эратосфе́на — простой алгоритм нахождения всех простых чисел до некоторого целого числа n. Он был создан древнегреческим математиком Эратосфеном.

Пример для n = 20

Запишем натуральные числа начиная от 2 до 20 в ряд:

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20

Первое число в списке 2 — простое. Пройдём по ряду чисел, вычёркивая все числа кратные 2 (каждое второе, начиная с 22 = 4):

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16 
17 18 19 20

Следующее невычеркнутое число 3 — простое. Пройдём по ряду чисел, вычёркивая все числа кратные 3 (каждое третье, начиная с 32 = 9):

  2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20 
Решето Эратосфена

Следующее невычеркнутое число 5 — простое. Пройдём по ряду чисел, вычёркивая все числа кратные 5 (каждое пятое, начиная с 52 = 25). И т. д.

Необходимо провести вычёркивания кратных для всех простых чисел p, для которых p^2\le n. В результате все составные числа будут вычеркнуты, а невычеркнутыми останутся все простые числа. Для n = 20 уже после вычёркивания кратных числу 3 все составные числа получаются вычеркнутыми.

См. также

Примеры реализации

Turbo Pascal

prost:=1; //Подготовка параметра для нахождения простых чисел
for i:=1 to n do //Цикл движения по массиву чисел
begin //НАЧАЛО
if p[i]=0 then continue else//Чтоб лишний раз не заходить в цикл
 inc(prost);                //Увеличение параметра,
 j:=i;                      //Подготовка параметра вложенного цикла
 while j<=n do              //Вложенный цикл для определения простых чисел
  if (p[j] mod prost=0)     //Если остаток от деления элемента на следующее простое число равен 0..
     and(p[j]<>0)           //..и этот элемент не равен 0..
     and(p[j]>prost) then   //..и этот элемент больше параметра prost..
  begin p[j]:=0; inc(j); end //..это СОСТАВНОЕ число, удаляем его из массива и ищем далее
  else inc(j);               //иначе это простое число, и дальнейший поиск
end; //КОНЕЦ

Wikimedia Foundation. 2010.

  • Эраст Гарин
  • Эрбад

Смотреть что такое «Эратосфена решето» в других словарях:

  • Эратосфена решето —         метод в теории чисел, назван по имени Эратосфена, заключающийся в отсеивании (например, путём зачёркивания) тех целых чисел заданной последовательности а1, a2,…, aN (например, натурального ряда чисел), которые делятся хотя бы на одно из …   Большая советская энциклопедия

  • ЭРАТОСФЕНА РЕШЕТО — метод, разработанный Эратосфеном (3 в. до н. э.) и позволяющий отсеивать составные числа из натурального ряда. Сущность Э. р. заключается в следующем. Зачеркивается единица. Число 2 простое. Зачеркиваются все натуральные числа, делящиеся на 2.… …   Математическая энциклопедия

  • Решето Аткина — В математике решето Аткина  быстрый современный алгоритм нахождения всех простых чисел до заданного целого числа N. Основная идея алгоритма состоит в использовании неприводимых квадратичных форм (представление чисел в виде ax²+by²).… …   Википедия

  • Решето Сундарама — В математике решето Сундарама детерминированный алгоритм нахождения всех простых чисел до некоторого целого числа . Разработан индийским студентом С. П. Сундарамом в 1934 году. Содержание 1 Описание 2 Обоснование …   Википедия

  • Решето Эратосфена — алгоритм нахождения всех простых чисел до некоторого целого числа n, который приписывают древнегреческому математику Эратосфену Киренскому. Содержание 1 Алгоритм …   Википедия

  • Решето Эратосфена — этим именем называют следующий способ получения ряда простых чисел. Из ряда чисел 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14… вычеркивают кратные двум; 4, 6, 8, 10, 12,… кратные трем: 6, 9, 12, 15,… кратные пяти: 10, 15, 20, 25, 30,…… …   Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона

  • БРУНА РЕШЕТО — один из решета методов в элементарной теории чисел, созданный В. Вруном [1]; является развитием Эратосфена решета. Метод Б. р. заключается в следующем: из последовательности натуральных чисел высеиваются (выбрасываются) числа с малыми простыми… …   Математическая энциклопедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Тест Миллера (теория чисел) — У этого термина существуют и другие значения, см. Тест Миллера. Не следует путать с «Тестом Миллера Рабина»  вероятностным полиномиальным тестом простоты. Тест Миллера  детерминированный полиномиальный тест простоты. В 1976 году Миллер… …   Википедия

dic.academic.ru

Решето Эратосфена Википедия

Решето́ Эратосфе́на — алгоритм нахождения всех простых чисел до некоторого целого числа n, который приписывают древнегреческому математику Эратосфену Киренскому[1]. Как и во многих случаях, здесь название алгоритма говорит о принципе его работы, то есть решето подразумевает фильтрацию, в данном случае фильтрацию всех чисел за исключением простых. По мере прохождения списка нужные числа остаются, а ненужные (они называются составными) исключаются.

История[ | ]

Название «решето» метод получил потому, что, согласно легенде, Эратосфен писал числа на дощечке, покрытой воском, и прокалывал дырочки в тех местах, где были написаны составные числа. Поэтому дощечка являлась неким подобием решета, через которое «просеивались» все составные числа, а оставались только числа простые. Эратосфен дал таблицу простых чисел до 1000.

Алгоритм[ | ]

Анимация шагов алгоритма Эратосфена для нахождения простых чисел до 120

Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:

  1. Выписать подряд все целые числа от двух до n (2, 3, 4, …, n).
  2. Пусть переменная p изначально равна двум — первому простому числу.
  3. Зачеркнуть в списке числа от 2p до n считая шагами по p (это будут числа кратные p: 2p, 3p, 4p, …).
  4. Найти первое незачёркнутое число в списке, большее чем p, и присвоить значению переменной p это число.
  5. Повторять шаги 3 и 4, пока возможно.

Теперь все незачёркнутые числа в списке — это все простые числа от 2 до n.

На практике, алгоритм можно улучшить следующим образом. На шаге № 3 числа можно зачеркивать начиная сразу с числа p2, потому что все составные числа меньше него уже будут зачеркнуты к этому времени. И, соответственно, останавливать алгоритм можно, когда p2 станет больше, чем n.[2] Также, все простые числа (кроме 2) — нечётные числа, и поэтому для них можно считать шагами по 2p, начиная с p2.

Пример для n = 30[ | ]

Запишем натуральные числа, начиная от 2, до 30 в ряд:

2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Первое число в списке, 2 — простое. Пройдём по ряду чисел, зачёркивая все числа, кратные 2 (то есть, каждое второе, начиная с 22 = 4):

2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Следующее незачеркнутое число, 3 — простое. Пройдём по ряду чисел, зачёркивая все числа, кратные 3 (то есть, каждое третье, начиная с 32 = 9):

2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 

ru-wiki.ru

ПРОСТЫЕ ЧИСЛА И РЕШЕТО ЭРАТОСФЕНА

ПРОСТЫЕ ЧИСЛА И РЕШЕТО ЭРАТОСФЕНА

Кушнарев А.С. 1

1

Мельникова Е.Н. 1

1

Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF

 Введение

Впервые о простых числах мы узнали в 6 классе на уроке математики, когда изучали тему «Простые и составные числа». Так же на форзаце учебника «Математика-6» имеется таблица простых чисел до числа 997 (Приложение 1). Мы знаем то, что находится на форзаце, имеет важную значимость в изучении данного предмета. И действительно, это подтвердилось при дальнейшем изучении математики

Мы заинтересовались происхождением простых чисел, алгоритмами нахождения простых чисел, алгоритмом создания таблиц простых чисел, в частности, «решетом Эратосфена».

Работу начали с анкетирования учащихся 6 – 10 классов нашей школы, чтобы выяснить знают ли они:

1. Что такое решето?

2. Какие числа называются простыми?

3. Кто такой Эратосфен?

4. Что такое «решето Эратосфена»?

В опросе приняли участие 90 человек. Результаты оказались следующими (Приложение 2).

Проанализировав ответы учащихся, мы убедились, что наша тема актуальна. Поэтому мы и решили глубже исследовать тему «Простые числа» и рассказать другим ученикам о простых числах на модели «решето Эратосфена».

Гипотеза: Действительно ли мы можем найти простое число больше 997.

Цель работы: изучить алгоритм построения «решета Эратосфена» и изготовить его материальную модель для использования на уроках математики.

Задачи:

1.Изучить имеющуюся литературу по теме проекта.

2.Провести опрос по теме проекта.

3.Найти простые числа, больше числа 997.

4.Изготовить материальную модель решета Эратосфена.

Объект исследования: простые числа, «решето Эратосфена»

Предмет исследования: таблица простых чисел

Методы исследования:

1.Работа с учебной и научно-популярной литературой, ресурсами сети Интернет.

2. Анкетирование,

3. Опыты и эксперименты с простыми числами

Этапы проекта:

— Теоретический

— Практический

2. Основная часть

2.1. Краткое описание используемых понятий

Решето – это утварь для просеивания муки, состоящая из широкого обруча и натянутой на него с одной стороны сетки. Решето отличается от сита более крупным размером отверстий сетки. (Толковый словарь Ушакова)

Решето -1) Предмет обихода широкий обруч с натянутой на него частой сеткой для просеивания чего-нибудь

2) Просеивающее устройство. (Толковый словарь Ожегова)

Решето – всякая несплошная вещь со сквозниной, с промежками, пролётами; ряд установленных жёрдочек, шестиков…переплетённых вдоль и поперёк, или иным образом.(Толковый словарь Даля)

Простое число – это натуральное число, которое не имеет других делителей кроме 1 и самого себя. (Пример: число 19 = 1 * 19)

Составное число – это натуральное число, у которого есть делители,отличные от 1 и самого себя. (Пример: число 10 = 5*2)

Всякое составное число можно разложить на простые множители.(Например: 63=3*3*7 или 363= 3*11*11)

Число 1 имеет только один делитель: само это число. Поэтому оно не относит ни к простым, ни к составным числам.

Первым проблему определения простых чисел обозначил и решил древнегреческий ученый Эратосфен Киренский примерно в 220 году до нашей эры, предложив один из алгоритмов определения простых чисел. Этот способ назвали «решето Эратосфена».

В 1909 году американский математик Деррик Норман Лемер опубликовал таблицы простых чисел в промежутке от 1 до 10.017.000. Книга таблиц имеется в Российской государственной библиотеке в Москве.

Еще более титаническую вычислительную работу выполнил профессор Парижского университета славянский математик Якуб Филипп Кулик (01.05.1793- 28.02.1863).Над своей рукописью «Великий канон делителей всех чисел, не делящихся на 2, 3 и 5, и заключенных между ними простых чисел до 100 300 201» он работал последние 20 лет жизни, не имея никакой надежды на его издание. Это произведение до сих пор не напечатано. Оно хранится в библиотеки Венской АкадемииНаук.

2.2. Биография Эратосфена

Вопросом изучения простых чисел, закономерности их появления и поиском самого большого простого числа математики занимаются очень давно. Первые сведения о простых числах, встречаются в трудах древне – греческого математика Эратосфена Киренского (276г.до н.э-194г. до н.э).

Греческий математик Эратосфен, живший более чем за 200 лет до н.э., составил первую таблицу простых чисел. Это один из самых разносторонних ученых античности. Особенно прославили Эратосфена труды по астрономии, географии и математике, однако он успешно трудился и в области филологии, поэзии, музыки и философии, за что современники дали ему прозвище Пентатл, т.е. Многоборец. Другое его прозвище Бета, т.е. «второй», возможно, также не содержит ничего уничижительного: им желали показать, что во всех науках Эратосфен достигает не высшего, но превосходного результата. Он первый вычислил окружность Земли, пользуясь методами геометрии.

Эратосфен родился в Африке, в Кирене. Учился сначала в Александрии, а затем в Афинах. Вероятно, именно благодаря столь широкому образованию и разнообразию интересов Эратосфен получил от Птолемея III приглашение вернуться в Александрию, чтобы стать воспитателем наследника престола и возглавить Александрийскую библиотеку (одну из первых библиотек в мире). В знаменитой библиотеке хранилось более 700 000 свитков, которые содержали все сведения о мире, известные людям той эпохи. Эратосфен принял это предложение и занимал должность библиотекаря вплоть до своей кончины. При содействии своих помощников Эратосфен первым рассортировал свитки по темам. Он дожил до глубокой старости, а когда ослеп, то перестал есть и умер от голода. Он не представлял себе жизни без возможности работать со своими любимыми книгами.

Его научные таланты удостоились высокой оценки современника Эратосфена, Архимеда, который посвятил ему свою книгу Эфодик (т.е. Метод)

2.3. Из истории появления «решета Эратосфена»

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

1.Из ряда чисел: 2,3,4,5,6,7,8,9,10,11,12,13 и т. д вычёркиваем числа кратные 2.

2.Затем, вычёркиваем числа кратные 3.

3.Вычёркиваем числа кратные 4.

4.Вычёркиваем числа кратные 5.

5.Вычёркиваем числа кратные 6 .

6.Делим, пока все составные числа не будут «просеяны», и останутся только простые числа: 2,5,7,11,.13….

Пример

Запишем натуральные числа, начиная от 2 до 20 в ряд.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Первое число в списке 2 — простое. Пройдём по ряду чисел, вычёркивая все числа кратные 2

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Следующее не вычеркнутое число 3 — простое. Пройдём по ряду чисел, вычёркивая все числа кратные 3

2 3 5 6 7 9 11 12 13 15 17 19

Процесс окончен. Все незачеркнутые числа последовательности являются простыми.

Так как греки делали записи на покрытых воском табличках или на натянутом папирусе, а числа не вычёркивали, а выкалывали иглой, то таблица в конце вычислений напоминала решето. Поэтому алгоритм Эратосфена называют решетом Эратосфена: в этом решете «отсеиваются» простые числа от составных. Таким способом в настоящее время составляют таблицы простых чисел, но уже с помощью вычислительных машин.

2.4. Практическая часть проекта: изготовление решета Эратосфена

Для изготовления «решета Эратосфена» мы взяли фанеру формата 36*42. Начертили сетку, в каждой клетке записали натуральные числа от 1001 до 1120.

Используя алгоритм построения «решета Эратосфена», проделали отверстия в тех клетках, в которых указаны составные числа.(Приложение 3)

  1. Заключение

Мы изучили алгоритм построения «решета Эратосфена», изготовили его материальную модель, изучили литературу и провели опрос. Подтвердили гипотезу, что можно найти простое число, больше чем 997.

Следовательно – наша цель достигнута, проблема решена. Разработанные нами материалы могут использоваться на уроках математики.

  1. Список использованной литературы

  1. Я познаю мир. Детская энциклопедия: Математика/ Я 11 Авт.-сост. А.П. Савин и др.: — М.: ООО «Издательство АСТ», 2001.

  2. Интернет – ресурсы( Википедия)

  3. А.Г. Мерзляк, В.Б. Полонский, М.С. Якир. Учебник «Математика 6 класс»:Издательство «Вентана–Граф», Москва, 2014

  4. Толковый словарь Ушакова

  5. Толковый словарь Ожегова

  6. Толковый словарь Даля

Приложение 1

таблица простых чисел

Приложение 2

Анкетирование

1. Что такое решето?

2. Какие числа называются простыми?

3. Кто такой Эратосфен?

4. Что такое «решето Эратосфена»?

В опросе приняли участие 90 человек. Результаты оказались следующими.

Вопрос

«да»

«нет»

 

Знаете ли вы что такое решето?

67

23

 

Знаете ли вы какие числа называются простыми?

80

10

 

Знаете ли вы кто такой Эратосфен?

15

75

 

Знаете ли вы что такое «решето Эратосфена»?

5

85

 

Приложение 3

модель решета Эратосфена

Просмотров работы: 2240

school-science.ru

Решето Эратосфена — Энциклопедия научных парадоксов

Материал из Энциклопедия научных парадоксов

Эта статья является статьёй проекта «Простые числа»

Вы можете помочь проекту, развив и дополнив её.

Решето Эратосфена — алгоритм нахождения всех простых чисел до некоторого целого числа n{\displaystyle n}, который приписывают древнегреческому математику Эратосфену Киренскому.

Для нахождения всех простых чисел не больше заданного числа n, следуя методу Эратосфена, нужно выполнить следующие шаги:

  1. Выписать подряд все целые числа от двух до n (2, 3, 4, …, n).
  2. Пусть переменная p изначально равна двум — первому простому числу.
  3. Вычеркнуть из списка все числа от 2p до n, делящиеся на p (то есть, числа 2p, 3p, 4p, …)
  4. Найти первое не вычеркнутое число, большее чем p, и присвоить значению переменной p это число.
  5. Повторять шаги 3 и 4 до тех пор, пока p не станет больше, чем n
  6. Все не вычеркнутые числа в списке — простые числа.

На практике, алгоритм можно немного улучшить следующим образом. На шаге №3, числа можно вычеркивать, начиная сразу с числа p2{\displaystyle p^{2}}, потому что все составные числа меньше его уже будут вычеркнуты к этому времени. И, соответственно, останавливать алгоритм можно, когда p2{\displaystyle p^{2}} станет больше, чем n{\displaystyle n}.

paradox.pifia.ru

Алгоритмы поиска простых чисел / Habr

«Самое большое простое число 232582657-1. И я с гордостью утверждаю, что запомнил все его цифры… в двоичной форме».
Карл Померанс

Натуральное число называется простым, если оно имеет только два различных делителя: единицу и само себя. Задача поиска простых чисел не дает покоя математикам уже очень давно. Долгое время прямого практического применения эта проблема не имела, но все изменилось с появлением криптографии с открытым ключом. В этой заметке рассматривается несколько способов поиска простых чисел, как представляющих исключительно академический интерес, так и применяемых сегодня в криптографии.

Решето Эратосфена


Решето Эратосфена — алгоритм, предложенный древнегреческим математиком Эратосфеном. Этот метод позволяет найти все простые числа меньше заданного числа n. Суть метода заключается в следующем. Возьмем набор чисел от 2 до n. Вычеркнем из набора (отсеим) все числа делящиеся на 2, кроме 2. Перейдем к следующему «не отсеянному» числу — 3, снова вычеркиваем все что делится на 3. Переходим к следующему оставшемуся числу — 5 и так далее до тех пор пока мы не дойдем до n. После выполнения вышеописанных действий, в изначальном списке останутся только простые числа.

Алгоритм можно несколько оптимизировать. Так как один из делителей составного числа n обязательно , алгоритм можно останавливать, после вычеркивания чисел делящихся на .

Иллюстрация работы алгоритма из Википедии:


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

Существует ряд оптимизаций, позволяющих снизить эти показатели. Прием под названием wheel factorization состоит в том, чтобы включать в изначальный список только числа взаимно простые с несколькими первыми простыми числами (например меньше 30). В теории предлагается брать первые простые примерно до . Это позволяет снизить сложность алгоритма в раз. Помимо этого для уменьшения потребляемой памяти используется так называемое сегментирование. Изначальный набор чисел делится на сегменты размером и для каждого сегмента решето Эратосфена применяется по отдельности. Потребление памяти снижается до .

Решето Аткина


Более совершенный алгоритм отсеивания составных чисел был предложен Аткином и Берштайном и получил название Решето Аткина. Этот способ основан на следующих трех свойствах простых чисел.

Свойство 1

Если n — положительное число, не кратное квадрату простого числа и такое, что . То n — простое, тогда и только тогда, когда число корней уравнения нечетно.

Свойство 2

Если n — положительное число, не кратное квадрату простого числа и такое, что . То n — простое, тогда и только тогда, когда число корней уравнения нечетно.

Свойство 3

Если n — положительное число, не кратное квадрату простого числа и такое, что . То n — простое, тогда и только тогда, когда число корней уравнения нечетно.

Доказательства этих свойств приводятся в этой статье.

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

Из описания алгоритма следует, что вычислительная сложность решета Аткина и потребление памяти составляют . При использовании wheel factorization и сегментирования оценка сложности алгоритма снижается до , а потребление памяти до .

Числа Мерсенна и тест Люка-Лемера


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

Один из таких методов проверки — тест Люка-Лемера. Это детерминированный и безусловный тест простоты. Это означает, что прохождение теста гарантирует простоту числа. К сожалению, тест предназначен только для чисел особого вида , где p — натуральное число. Такие числа называются числами Мерсенна.

Тест Люка-Лемера утверждает, что число Мерсенна простое тогда и только тогда, когда p — простое и делит нацело -й член последовательности задаваемой рекуррентно: для .

Для числа длиной p бит вычислительная сложность алгоритма составляет .

Благодаря простоте и детерминированности теста, самые большие известные простые числа — числа Мерсенна. Самое большое известное простое число на сегодня — , его десятичная запись состоит из 24,862,048 цифр. Полюбоваться на эту красоту можно здесь.

Теорема Ферма и тест Миллера-Рабина


Простых чисел Мерсенна известно не очень много, поэтому для криптографии с открытым ключом необходим другой способ поиска простых чисел. Одним из таким способов является тест простоты Ферма. Он основан на малой теореме Ферма, которая гласит, что если n — простое число, то для любого a, которое не делится на n, выполняется равенство . Доказательство теоремы можно найти на Википедии.

Тест простоты Ферма — вероятностный тест, который заключается в переборе нескольких значений a, если хотя бы для одного из них выполняется неравенство , то число n — составное. В противном случае, n — вероятно простое. Чем больше значений a использовано в тесте, тем выше вероятность того, что n — простое.

К сожалению, существуют такие составные числа n, для которых сравнение выполняется для всех a взаимно простых с n. Такие числа называются числам Кармайкла. Составные числа, которые успешно проходят тест Ферма, называются псевдопростыми Ферма. Количество псевдопростых Ферма бесконечно, поэтому тест Ферма — не самый надежный способ определения простых чисел.

Тест Миллера-Рабина

Более надежных результатов можно добиться комбинируя малую теорему Ферма и тот факт, что для простого числа p не существует других корней уравнения , кроме 1 и -1. Тест Миллера-Рабина перебирает несколько значений a и проверяет выполнение следующих условий.

Пусть p — простое число и , тогда для любого a справедливо хотя бы одно из условий:

  1. Существует целое число r < s такое, что

По теореме Ферма , а так как из свойства о корнях уравнения следует что если мы найдем такое a, для которого одно из условий не выполняется, значит p — составное число. Если одно из условий выполняется, число a называют свидетелем простоты числа n по Миллеру, а само число n — вероятно простым.

Чем больше свидетелей простоты найдено, тем выше вероятность того, что n — простое. Согласно теореме Рабина вероятность того, что случайно выбранное число a окажется свидетелем простоты составного числа составляет приблизительно .

Следовательно, если проверить k случайных чисел a, то вероятность принять составное число за простое .

Сложность работы алгоритма , где k — количество проверок.

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

Он смог сгенерировать такие составные числа, которые успершно прошли тест на простоту в библиотеках OpenSSL, CryptLib, JavaScript Big Number и многих других.

Тест Люка и Тест Baillie–PSW


Чтобы избежать уязвимости, связанные с ситуациями, когда сгенерированное злоумышленником составное число, выдается за простое, Мартин Альбрехт предлагает использовать тест Baillie–PSW. Несмотря на то, что тест Baillie–PSW является вероятностным, на сегодняшний день не найдено ни одно составное число, которое успешно проходит этот тест. За нахождение подобного числа в 1980 году авторы алгоритма пообещали вознаграждение в размере $30. Приз пока так и не был востребован.

Ряд исследователей проверили все числа до и не обнаружили ни одного составного числа, прошедшего тест Baillie–PSW. Поэтому, для чисел меньше тест считается детерминированным.

Суть теста сводится к последовательной проверке числа на простоу двумя различными методами. Один из этих методов уже описанный выше тест Миллера-Рабина. Второй — тест Люка на сильную псевдопростоту.

Тест Люка на сильную псевдопростоту

Последовательности Люка — пары рекуррентных последовательностей , описываемые выражениями:


Пусть и — последовательности Люка, где целые числа P и Q удовлетворяют условию

Вычислим символ Якоби: .

Найдем такие r, s для которых выполняется равенство

Для простого числа n выполняется одно из следующих условий:

  1. n делит
  2. n делит для некоторого j < r

В противном случае n — составное.

Вероятность того, что составное число n успешно пройдет тест Люка для заданной пары параметров P, Q не превышает 4/15. Следовательно, после применения теста k раз, эта вероятность составляет .

Тесты Миллера-Рабина и Люка производят не пересекающиеся множества псевдопростых чисел, соответственно если число p прошло оба теста, оно простое. Именно на этом свойстве основывается тест Baillie–PSW.

Заключение


В зависимости от поставленной задачи, могут использоваться различные методы поиска простых чисел. К примеру, при поиске больших простых чисел Мерсенна, сперва, при помощи решета Эратосфена или Аткина определяется список простых чисел до некоторой границы, предположим, до . Затем для каждого числа p из списка, с помощью теста Люка-Лемера, на простоту проверяется .

Чтобы сгенерировать большое простое число в криптографических целях, выбирается случайное число a и проверяется тестом Миллера-Рабина или более надежным Baillie–PSW. Согласно теореме о распределении простых чисел, у случайно выбранного числа от 1 до n шанс оказаться простым примерно равен . Следовательно, чтобы найти простое число размером 1024 бита, достаточно перебрать около тысячи вариантов.

P.S. Исходники


Реализацию всех описанных алгоритмов на Go можно посмотреть на GitHub.

habr.com

Опыт Эратосфена для вычисления размеров Земли

Размеры Земли были впервые определены более двух тысяч лет назад  греческим учёным Эратосфеном.

Р1

Древнегреческий астроном и географ Эратосфен жил в Александрии, там и проводил свои наблюдения. Как-то он узнал, что в месте, находящимся на расстоянии 5 000 стадий (одна греческая стадия примерно равна 157,5 м) от Александрии в день  летнего солнцестояния Солнце освещает дно колодца.

Учитывая то, что по наблюдениям самого Эратосфена в этот день лучи Солнца падали под углом 7,2о к вертикали, вычислить размеры Земли.

Выполним чертёж к этой задаче, учитывая, то что солнечные лучи падают на Землю параллельно, так как Солнце находится по сравнению с размерами Земли на очень большом расстоянии, (на чертеже они изображены оранжевым цветом)

Р2

1) Рассчитаем расстояние от А до В:

5 000 стадий · 157,5 м = 787 500 м

2) Так как центральному углу АОВ = 7,2о  соответствует дуга  

АВ = 787 500 м, то составим пропорцию:

360о / 7,2о = длина всей окружности / 787 500 м.

Решив эту пропорцию, получаем длину всей окружности

360о · 787500 м / 7,2о = 39 375 000 м.

3) Помня о том, что длина всей окружности = 2∏R, где R – радиус окружности, находим

R = 39 375 000 м / 2∏ = 6269904,4586 м.

Сравним полученные данные с размерами Земли, рассчитанными другими, более современными способами, где  минимальный радиус Земли у полюсов 6 356 863 м, максимальный радиус на экваторе 6 378 245 м, а средний радиус Земли – 6 371 302 м.  

Рассчитаем погрешность вычисления в опыте Эратосфена

(6 371 302 м – 6 269 904 м) / 6 371 302 м = 0,0159 = 1,59 % .

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

© blog.tutoronline.ru, при полном или частичном копировании материала ссылка на первоисточник обязательна.

blog.tutoronline.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *