МИНАЕВ1 Владимир Александрович, доктор технических наук, профессор ВАСИЛЬЕВ2 Николай Петрович, кандидат технических наук, доцент ЛУКЬЯНОВ3 Вениамин Владимирович НИКОНОВ4 Семен Андреевич НИКЕРОВ5 Дмитрий Викторович
ВЫСОКОПРОИЗВОДИТЕЛЬНЫЙ АЛГОРИТМ ГЕНЕРАЦИИ ПРОСТЫХ ЧИСЕЛ В ПРОИЗВОЛЬНОМ ДИАПАЗОНЕ С ПРИМЕНЕНИЕМ КОЛЬЦЕВОЙ ФАКТОРИЗАЦИИ
Даются, определения, порядка индексного алгоритма и паттерна размещения, составных чисел. Рассмотрены, индексные алгоритмы, вычисления, простых чисел в сочетании с методом, кольцевой факторизации для. предварительного отбора составных чисел. Производится, сравнение индексных алгоритмов различного порядка.
Ключевые слова: простые числа, высокоскоростной алгоритм, генерации, кольцевая, факторизация, индексный алгоритм..
The definitions of the index algorithm order and pattern. layouts of composite numbers are given. The Primes index calculation algorithms in combination with the method, of wheel factorization for pre-selection of composite numbers are considered. Comparison of different order index algorithms is made.
Keywords: primes, high speed, generation, algorithm, wheel factorization, index algorithm.
Простые числа используются для шифрования информации. Так, например, известный алгоритм шифрования RSA использует два простых числа для формирования открытого ключа. При этом, чтобы расшифровать содержимое конфиденциального письма, надо провести процесс факторизации некоторого очень большого числа, т.е. разложить его на сомножители, которые являются простыми числами.
Решение задачи факторизации при этом — исключительно вычислительно-емкая процедура, так как помимо нахождения сомножителей, каждый из них необходимо проверить на простоту.
Для генерации простых чисел методом просеивания (исключение составных чисел, т.н. «решето») применяются решета Эратосфена, Аткина и Сундарама в разных модификациях и производные от этих алгоритмов. В 2011 г. опубликована работа В.А. Минаева [1], в которой описывается алгоритм, являющийся основой для создания новых высокопроизводительных алгоритмов, превосходящих по скорости вычисления простых чисел все предыдущие. Алгоритм основывается на теореме о полном множестве простых чисел.
Автор доказал, что полное множество простых чисел вида {6 к+1}, к = 1,2,3... (по определению В.А. Минаева — плюс
простые числа) формируется путем вычитания из общего множества чисел {+qi} вида {6 к+1}; к = 1,2,3., определенного как {+Б}, подмножества составных чисел \ ^ , определяемых с помощью уравнений:
С(,Г) - х + Ч, х 6 х /и;
(1)
где т = 0,1,2.; I = 1,2,3... А полное множество простых чисел вида {6к-1}; к = 1,2,3...(минус простые числа) — путем вычитания из общего множества чисел {-qi} вида {6 к-1}; к = 1,2,3., определенного как {~Б}, подмножества составных чисел "С( , вычисляемых из соотношений:
' - РосНОУ, профессор;2 - НИЯУ МИФИ, доцент;
3 - НИЯУ МИФИ, аспирант; 45 - РосНОУ, аспирант.
~с(„р = 41х % + Чх х 6 х /и;
(2)
где ш = 0,1,2...; I = 1,2,3... Смысл алгоритма, предложенного в [1], связан не с прямым вычислением простых чисел, а с нахождением полного множества составных того же вида
{6 к ± 1}; к = 1,2,3.....и последующим
вычитанием соответствующих множеств.
В настоящей статье описываются новые индексные алгоритмы генерации простых чисел, на сегодняшний день самые быстрые, основой разработки которых является теорема, доказанная в [1], и правило знаков, сформулированное там же.
Индексные зависимости формирования составных чисел
Согласно правилу знаков [1], любые составные числа из множеств -5 и +5 представляются в виде произведений:
-с( Як, +Чп) = Чк х Ч с(+Чк, -Чп) = +Чк х -Чш
+|
с( Чк, Чп) = Чк х Чп, с(+Чк, +Чп) = +Чк х +Чп,
(3)
(4)
Эти составные числа адресуются во множестве -5 или +5 следующими четырьмя индексами:
+к1 = (-Чк + к),
-к2 = (+Чк - к), -к3 = (-Чк - к), +к4 = (+Чк + к)
(10)
или в векторном виде (вектор включает по две компоненты):
+к = (±Чк + к), -к = (±Чк - к), (11) где к = 1,2,3,____
Приведем примеры адресации (табл. 1, 2), используя формулы (5) — (11), при п = 1.
Индексный алгоритм второго порядка для генерации простых чисел
Отметим, что для ускорения поиска простых чисел на определенном отрезке натурального ряда для предварительного отбора составных чисел в работе [2] реализован и исследован индексный алгоритм, построенный с использованием кольцевой факторизации для 3# = 6 (примориал простых чисел 2x3). Она позволила на предварительном этапе отсеять значительную часть составных чисел — 66,66...%. На рис. 1 приведено графическое изображение кольцевой факторизации для 3# и 5# [3 - 4].
где к, п = 1,2,3,____
Подставляя соответствующие значения для ±Чк и ±Чп, получим соотношения:
с(-Чк, +Чп) = 6 х (п х-Чк + к) - 1, (5) с(+Чк, -Чп) = 6 х (п х+Чк - к) - 1, (6) с(-Чк, -Чп) = 6 х (п х-Чк - к) + 1, (7)
с(+Чк, +Чп) = 6 х (п х+Чк + к) + 1. (8)
-с(-Чк, 7) = 6х(-Чк + к) - 1, -с(+Чк, 5) = 6х(+Чк - к) - 1,
+с(-Чк, 5) = 6х(-Чк - к) + 1, +с(+Чк, 7) = 6х(+Чк + к) + 1.
Рис. 1. Графическое изображение кольцевой факторизации для 3# и 5#
Таблица 1. Адресация составных чисел с использованием +к-индексной зависимости
Из (5) — (8) следует, что всевозможные сочетания п и к (к, п = 1,2,3,...) позволяют получить весь набор составных чисел вида {6х1 ± 1}, I = 1,2,3,...; в любом заданном интервале. Так, например, при п = 1 выражение, стоящее в скобках формул (5) — (8), описывает получение следующего набора составных чисел:
к +к1, +к4 ±с (±Як1 +ки) ±с (±Як1 +к4,)
1 5 (множество -5) 5+1 = 6 35 (множество -5)
1 7 (множество +5) 7+1 = 8 49 (множество +5)
4 25 (множество +5) 25 + 4 = 29 175 (множество +5)
8 47 (множество -5) 47 + 8 = 55 329 (множество +5)
13 79 (множество +5) 13 + 79 = 92 553 (множество +5)
127 761 (множество -5) 127 + 761 = 888 5327 (множество -5)
Таблица 2. Адресация составных чисел с использованием к-индексной зависимости
(9)
к ±Як к2, к3 ±с (±Як1 -к2,) ±с (±Як1 -к3,)
1 5 (во множестве -5) 5 - 1=4 25 (во множестве +5)
1 7 (во множестве +5) 7 - 1=6 35 (во множестве -5)
4 25 (во множестве +5) 25 - 4 = 21 125 (во множестве -5)
8 47 (во множестве -5) 47 - 8 = 39 235 (во множестве +5)
13 79 (во множестве +5) 79 - 13 = 66 395 (во множестве -5)
127 761 (во множестве -5) 761 - 127 = 634 3805 (во множестве +5)
Нужно отметить, что для 7# (примо-риал простых чисел равен 2x3x5x7) — отсеивается больше 77% составных чисел, а для 251# — около 90%. Учитывая важность предварительного просеивания, в настоящей работе обосновываются и исследуются индексные алгоритмы, построенные с применением кольцевой факторизации для примориалов, превышающих значение 6.
Введем понятие порядок индексного алгоритма, под которым подразумевается количество первых простых чисел, использованных при соответствующей кольцевой факторизации. Например, для 3# = 2 х 3 = 6 порядок индексного алгоритма равен 2, а для 5# = 2 х 3 х 5 = 30 — порядок равен 3. Число к = 1,2,3..., участвующее в формировании пары чисел, каждое из которых принадлежит множеству -5 или +5, определим как к-индекс. к-индекс адресует числа множеств и +5 следующим образом: одному его значению одновременно соответствуют по одному элементу из каждого множества; при этом соответствие между к-ин-дексом и элементом в каждом из множеств — взаимно однозначное. Множества -5 и +5 будем называть симметричными по отношению друг к другу, поскольку их элементы формируются симметрично относительно одного и того же к-индекса с разностью 2, т.е. для симметричных элементов множеств -5 и +5 разность +цк — = 2. В связи с тем, что каждое составное число есть член какой-либо арифметической прогрессии [5], был поставлен вопрос: можно ли адресовать все составные числа во множествах -5 и +5 через к-индексы и первые члены арифметических прогрессий, порождающих их подмножества?
Решение данного вопроса имеет существенную вычислительную и практическую ценность, так как определение массива индексов, соответствующих массиву составных чисел, позволяет избежать выделения огромной памяти под хранение последних в результате решений уравнений (1), (2). Нужно отметить, что существующие до сегодняшнего дня методы получения очередного простого числа учитывали все найденные предыдущие простые и составные числа, в то время как индексный подход позволяет без
Таблица 3. Примеры адресации составных чисел через их индексы
Чк к п +кп ±с(+кп,) -кп ±с(-кп,)
1 6 35 (-Б) 4 25 (+5)
5 (-Б) 2 11 65 (-Б) 9 55 (+5)
1 3 16 95 (-Б) 14 85 (+5)
4 21 125 (-Б) 19 115 (+5)
5 26 155 (-Б) 24 145 (+5)
1 22 133 (+Б) 16 95 (-5)
19 3 2 41 247 (+5) 35 209 (-5)
(+5) 3 60 361 (+Б) 54 323 (-5)
4 79 475 (+5) 71 437 (-5)
25 4 1 29 175 (+5) 21 125 (-5)
(+5) 2 54 325 (+5) 46 275 (-5)
Таблица 4. Скорость вычислений и требуемая для работы алгоритма память на различных интервалах_
Диапазон Время, с Память, МГб
5- -1-109 22 317
5- -2-109 48 635
5- -3-109 74 953
5- -4-109 101 1271
5- -5-109 164 1589
1020-1020+Ы09 105 317
1020-1020 + 2409 162 635
1020-1020 + 3409 222 953
1020-1020 + 4409 287 1271
1020-1020 + 5409 360 1589
■ Первая половина данных из табл. 5
Верхняя граница интервала
Рис. 2. Зависимость производительности индексного алгоритма от длины интервала в диапазоне 5+5^109.
учета «предыстории» вычислять простые и составные числа в заданном произвольном интервале на множестве натуральных чисел при задании его нижней и верхней границы. Предположим, требуется получить простые числа в диапазоне от одного
миллиарда до двух. Для ранее известных методов приходилось задавать только верхнюю границу, т.е. 2 млрд, выполнять ресурсоемкие расчеты, а затем отсекать ненужные значения простых и составных чисел. В нашем же случае задаются обе границы, и расчет
400 п
350-
300-
Вторая половина данных из табл. 5 - Линейное фитирование:
-6,35х 1012+ 6,35 х 10"8 хх;Я2= 0,9975
¡2Г 250-
Ш
и
и Он
т
200-
150-
100-
1Е20+1Е9 1Е20+2Е9 1Е20+ЗЕ9 1Е20+4Е9 Верхняя граница интервала
1Е20+5Е9
Рис. 3. Зависимость производительности индексного алгоритма от длины интервала в диапазоне 1020+1020+5^109.
св
ра Рн и
и
а
св Я
М св
К X Л 57
03
2.00Е+009 1,80Е+009 1,60Е+009 1.40Е+009 1.20Е+009 1,00Е+009 8.00Е+008 6.00Е+008 4.00Е+008 2.00Е+008 0.00Е+000
■ Индексный алгоритм А Решето Эратосфена Ф Алгоритм Минаева ▼ Решето Аткина
*
А®
А®
."Л* Ж '
0 5 10 15 20 25 30 35 40 45 50 55 60 Время [секунды]
Рис. 4. Сравнение скоростей работы алгоритмов вычисления всех простых чисел на интервале от 1 до п
ведется только в их пределах для требуемых значений простых и составных. Для произвольного п обобщим выражения (11) в виде уравнений:
+кп = п х ±Чк + к, -кп = п х ±Чк - к,
(12)
где к,п = 1,2,3,...
Члены этих арифметических прогрессий — это к-индексы, адресующие элементы множеств -5 или +5; При этом
±Чк может быть как простым, так и составным числом. Члены прогрессии адресуют составные числа, некоторые из них могут адресоваться и другой к-индексной прогрессией, формируя «дубли».
В работе [5] отмечено, что все «дубли» игнорируются при вычитании составных вида {6 к ± 1}, к = 1,2,3..., из объединения множеств +5 и -5, в результате остаются только простые числа вида {6 к ± 1}, к = 1,2,3..
Используя формулы (12), составим следующую таблицу примеров (табл. 3). Анализируя столбцы табл. 3, можно заметить, что +кп адресуют все составные числа в том множестве (-5 или +5) которому принадлежит ±Чк, а -кп — в симметричном множестве. Причем адресуемые составные числа кратны соответствующему ±Чк. Это дает возможность, определив граничные условия на ±кп и соответственно максимально необходимые для этого Чк, п и к, исходя из границ интервала, найти все простые числа.
Оценка производительности работы индексного алгоритма второго порядка
Индексный алгоритм второго порядка был реализован на С++ и протестирован на скорость вычислений и занимаемую при работе память. Результаты тестов отражены в табл. 4. Корректность работы алгоритма проверена с использованием источников для 20-разрядных и менее чисел [6 — 8] в пределах первых 50 млн простых чисел. Интересно отметить, что на начальном интервале расчета 5^5409 время вычислений экспоненциально зависит от величины интервала (рис. 2) — квадрат коэффициента корреляции равен 0,973, а при очень больших значениях п можно использовать линейное приближение (рис. 3), где квадрат коэффициента корреляции составляет 0,9975.
Сравнение производительности алгоритмов
Проведем сравнительные тесты различных алгоритмов вычисления простых чисел, работающих в одинаковых условиях: каждый из них был реализован на языке С++, запускался на одном и том же компьютере, на вход подавались одни и те же интервалы от 1 до п и замерялось время, за которое алгоритм выделит все простые числа на данном интервале. Результаты измерений представлены на рис. 4.
На рис. 5 по оси ординат отложены верхние пределы интервалов вычислений, т.е. п+1000 (нижние пределы отличались от верхних на 1000). По оси абсцисс — время, за которое алгоритм вычислял все простые числа на заданном интервале.
вшши
Предварительное просеивание с применением метода кольцевой факторизации в индексных алгоритмах произвольного порядка
Рассмотрим более детально индексный алгоритм второго порядка для нахождения простых чисел в заданном отрезке [Мш!П; Мшах], исходя из результатов работы [2]. Для этого применим кольцевую факторизацию для 3# к отрезку [1; Мшах], введем обозначения
1+бк = +1, дЦ = 6к + 5,
где к = 0,1,2, ... ктс возможного к = кп полнено условие
(для максимально х должно быть вы-
2,00Е+0018-| ■ Индексный алгоритм
. ♦ Блочное решето Эратосфена
ев 1.00Е+0018- © Алгоритм Минаева
5 ■ А Решето Эратосфена
И 1.60Е+0018 -
5Г ■
£ 1.40Е+0018 -
® 1.20Е+0018 - ■
Я ■ ■
Я 1.00Е+0018 - ■
3 ■ ■
8.00Е+0017 - ■
3 6.00Е+0017 - ■
2 ■ ■ Я 4.00Е+0017- ■
5Г ■ ■
И 2.00Е+0017- ■ .л
■ " «в ♦
О,ООЕ+ООО ■ -г ■»■ 1^1 .1. I*. I . I*. 1*111*1 . I*. |11
О 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
Время [секунды]
Рис. 5. Сравнение скоростей работы алгоритмов генерации простых чисел на интервале от п до п+1000 при различных п.
о+1
и занесем эти данные в табл. 5. В левом столбце таблицы приведена последовательность индексов 0, 1, 2, ... кшах, в двух других столбцах — отображения этой последовательности во множества вида {6к + 1} и {6к + 5}, содержащие как простые, так и составные числа, а также единицу.
Перейдем к следующему этапу — отсеву оставшихся после кольцевой факторизации составных чисел из множеств Ш1} и |д6+5}, где к = 0, 1, 2, ... кшах. Как показано в [2], все составные числа, кратные числам ql+1 или q6+5, где г = 0, 1, 2, ... !шах (для максимально возможного г = !шах должно быть выполнено условие (?))_ ) 2 ^ Nшax), можно исключить из табл. 5, вычислив массив их индексов с помощью соответствующих соотношений.
Для фиксированного q¿í1 последовательность ))) ) 22Г))1 + 2 , где ш = 1, 2, 3, ... , индексирует все кратные ему составные числа во множестве ^ы1}, а последовательность т • ^ — 2 — 1 , где ш = 1, 2, 3, . , индексирует все кратные q¿í1 составные числа во множестве
Ш5} [2].
Для заданного отрезка [Мш1п; Ышах] из вышеупомянутых последовательностей нужно выбирать те их члены, которые индексируют числа, содержащиеся внутри него. Пример для q6•+1 = 7 приведен в табл. 6, в левом столбце которой отмечены индексы ш• q6•+1, где ш = 1, 2, 3, . , а во втором и третьем столбцах отмечены кратные q6•+1 числа,
Таблица 5. Результаты кольцевой факторизации для 3# в табличном виде
Индекс Чбк5
0 1 5
1 7 11
2 13 17
3 19 23
4 25 29
к 6кшах + 1 6кшах + 5
индексируемые последовательностями соответственно
1) = {8, 22, 29, 36, ...} и - 2) = {5, 19, 26, 33, ...}.
Для фиксированного q¿í5, в свою очередь, уже другая последовательность (ш^6+5 — г), где ш = 1, 2, 3, ... , индексирует все кратные этому q¿í5 составные числа во множестве {q6t1}, а последовательность (ш^+5 + г — 1), где ш = 1, 2, 3, ... , индексирует все кратные q¿í5 составные числа во множестве ^6+5}. Опять же для заданного отрезка [^шгп; Ышах] из вышеупомянутых последовательностей нужно выбирать те их члены, которые индексируют числа, содержащиеся внутри этого отрезка. Пример для q6.o5= 5 приведен в табл. 7, в левом столбце которой отмечены индексы ш^6.д5, где ш = 1, 2, 3, ... , а во втором и третьем отмечены кратные q6.o5 числа, индексируемые последовательностями соответственно +1 - 1) = {4, 24, 29, 34, ...} и
Таблица 6. Пример адресации составных чисел при д6+' = 7
(ш^О - 1) = {4, 24, 29, (ш^^1) = {5, 25, 30, 35, ...}. Таким образом, если перебрать все подходящие q601 и ql■i5, то из заданного отрезка [Мш!П; Мшах] можно отсеять все
к 46+' Ябк5
0 1 5
5 31 35
6 37 41
7 43 47
8 49 53
19 115 119
20 121 125
21 127 131
22 133 137
23 139 143
24 145 149
25 151 155
26 157 161
27 163 167
28 169 173
29 175 179
30 181 185
31 187 191
32 193 197
33 199 203
34 205 209
35 211 215
36 217 221
Таблица 7. Пример адресации составных чисел при дб+05 =5
к 4+'
0 1 5
4 25 29
5 31 35
24 145 149
25 151 155
26 157 161
27 163 167
28 169 173
29 175 179
30 181 185
31 187 191
32 193 197
33 199 203
34 205 209
35 211 215
составные числа и тем самым определить в нем все простые.
Индексный алгоритм произвольного порядка
Сформируем индексный алгоритм произвольного порядка п для нахождения простых чисел в заданном отрезке [Ыт1п; Мтах], обобщив изложенный алгоритм второго порядка. Применим кольцевую факторизацию для рп# к отрезку [1; Мтах], примем обозначения, аналогичные принятым выше
#С #•# = Рп#к + 1,
а = Рп#к + Рп+1,
О = Рп#± + Рп+',
где к = 0, 1, 2, ... ктах (для максимально возможного к = ктах должно быть выполнено условие <#•#'••# < Ытах), и занесем эти данные в табл. 8: В левом столбце табл. 8 приведена последовательность индексов 0, 1, 2, ... ктах, в других столбцах — отображения этой последовательности в множества вида
{Рп#к + 1},
{Рп#к + Рп+1}, {Рп#к + Рп+}, {Рп#к + Рп+},
содержащие как простые, так и составные числа, а также единицу. Использованные обозначения — Р1 = 2, Р2 = 3, ... Рп — записанные по возрастанию простые числа, п = 1, 2, 3,.; Рп# — примориал (произведение всех простых чисел, меньших либо равных Рп); Рп+1, ... Рп+г, ... Р+ — записанные по возрастанию числа из интервала (Рп; Рп#), являющиеся простыми или всевозможными произведениями простых чисел из этого же интервала; в — количество простых чисел и их произведений на интервале (Рп; Рп#); г = 1, 2, з, ... в. Перейдем к следующему этапу — отсеву оставшихся после кольцевой факторизации составных чисел из множеств
{#• ## „ }, <« }, ... {о }, ... { с },
где к = 0, 1, 2, ... ктах. Кратные числу д составные числа можно исключить, вычислив их индексы, для чего обобщим полученные для индексного алгоритма второго порядка соотношения на произвольный порядок. При этом
д е{о}={Рп#^ +1} и {Рп#•(+Рп+1} и .••
и {Рп#^1 + Рп+г} и ... и {Рп#^1 + Рп+},
где г = 0, 1, 2, ... гтах (для максимально возможного г = гтах должно быть выполнено условие (Ц^^ )2 < Мтах), г = 1, 2, 3, ... в. Чтобы вычислить эти индексы, введем для фиксированного д е {О} числа Ц , где] = 1, 2, ... (в + 1). Числа гд определяются в диапазоне [0; д — 1] и принимают значения из первого столбца табл. 8 соответственно тому, на какой строке в ] + 1)-ом столбце находится кратное д число. Это означает, что для каждого д определяется свой паттерн
Ц, д е {О}, (13)
под которым будем понимать схему размещения кратных д чисел в строках с индексами 0, 1, ... (д — 1) табл. 8. Покажем, что этот паттерн повторяется в строках с индексами
тд,..., (т + 1)д — 1,
где т = 0, 1, 2, ... . Число, стоящее в ] + 1)-ом столбце табл. 8 на строке с индексом
тд + г], (14)
при] > 1 равно
Рп#^(тд + г]) + Рп+]-1 = Рп#^д + + Рп+]-1 + Рп#тд (15)
или (при ] = 1)
РпНтд + г]) + 1 = Рп#] 1 + + Рп#тд, (16)
а значит, отличается от стоящего в ]+1 )-ом столбце табл. 8 на гд-й строке числа (при] >1 — Рп#^д + Рп+]-1, или при ] = 1 — Рп#^д + 1 по определению кратного д) на Рп#тд и, следовательно, делится на д.
Очевидно, что для определенного отрезка [МШп; Мтах] из последовательностей (14) нужно выбирать те их члены, которые индексируют числа, содержащиеся внутри этого отрезка в табл. 8. Рассмотрим в качестве примера отсеивание кратных дз+д чисел при выполнении индексного алгоритма третьего порядка. Третий порядок индексного алгоритма означает, что нужно взять 3 первых простых числа и перемножить их — 2 х 3 х 5 = 30, после чего составить таблицу кольцевой факторизации, содержащую все простые числа и состоящую из членов прогрессий {30к + 1 }, {30к + 7}, {30к +11}, {30к + 13}, {30к +17}, {30к +19}, {30к + 23}, {30к + 29}. Для отсеивания всех кратных 7 чисел нужно в диапазоне индексов [0; 6] определить паттерн (13) для числа 7:
Таблица 8. Результаты кольцевой факторизации для рп# в табличном виде
Индекс <7+1 ЧРп#к ¿¡Л'-1 а+р п+Р,н
0 1 Рп+1 Рп+г Рп+Б
1 Рп#-1 + 1 Р„#-1 + Рп+1 Р„#-1 + Рп+г Р„#'1 + Р„+,
к Рп#'ктах + 1 Рп#'ктах + Рп+1 Рп#'ктах + Рп+г Рп#'ктах + Рп+в
Таблица 9. Пример адресации составных чисел при q = q-^+o = 7
k 30k + 1 30k + 7 30k + 11 30k + 13 30k + 17 30k + 19 30k + 23 30k + 29
0 1 7 11 13 17 19 23 29
1 31 37 41 43 47 49 53 59
2 61 67 71 73 77 79 83 89
3 91 97 101 103 107 109 113 119
4 121 127 131 133 137 139 143 149
5 151 157 161 163 167 169 173 179
6 181 187 191 193 197 199 203 209
7 211 217 221 223 227 229 233 239
8 241 247 251 253 257 259 263 269
9 271 277 281 283 287 289 293 299
10 301 307 311 313 317 319 323 329
11 331 337 341 343 347 349 353 359
12 361 367 371 373 377 379 383 389
13 391 397 401 403 407 409 413 419
14 421 427 431 433 437 439 443 449
15 451 457 461 463 467 469 473 479
16 481 487 491 493 497 499 503 509
17 511 517 521 523 527 529 533 539
18 541 547 551 553 557 559 563 569
19 571 577 581 583 587 589 593 599
20 601 607 611 613 617 619 623 629
tq = {3,0,5,4,2,2,6,3}, для j = 1, ... 8, q = 7.
(17)
2,40E+015-i
Далее следует во множестве диапазонов индексов {[7; 13], [14; 20], ...} исключить соответственно паттерну (17) кратные 7 числа, которые будут находиться по формуле (14) на тех же местах, что и в диапазоне [0; 6]. Описанный процесс показан в табл. 9, полученной из табл. 8 при п = 3. Таким образом, если в заданном отрезке [Мшп; Мшах] с помощью соответствующих паттернов (13) отсеять составные числа (15) и (16), кратные всем подходящим q (13), то в нем останутся только простые числа. Отметим, что количество паттернов равно количеству элементов множества {О}, которое зависит от значения Мшах. Следовательно, на отрезках равного размера с различным Мшах количество паттернов будет больше у отрезка с большим Мшах. Перейдем к исследованию индексных алгоритмов различного порядка.
2,10Е+015-
Я 2.80Е+015-«
Рч
(D
£ 1.50Е+015-S
<й
Я" 1.20Е+015-I К
S3
9.00Е+014-
| 6.00Е+014-
® 3.00Е+014-
0,00Е+000-Кт
ш
Индексный алгоритм ]2 порядка )3 порядка >4 порядка
т—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—г"I
0 10 20 30 40 50 60 70 80 90 100 110 120
Время [секунды]
Рис. 6. Сравнение скоростей работы индексных алгоритмов генерации простых чисел на отрезке размером '06 (считая от значения ординаты)
Исследование индексных алгоритмов различного порядка
Рассмотренные индексные алгоритмы реализованы на языке C++ с исполь-
зованием библиотеки СМР для работы с большими числами и проверены на совпадение результатов генерации с первыми 50 млн простых чисел [6 — 8]. Индексные алгоритмы второго,
третьего и четвертого порядков исследовались на время работы при различных отрезках и различных нижних границах на компьютере с процессором Intel Core i3 2,93 ГГц. Увеличив-
1.80Е+015-
й 1.60Е+015-§ "
Э 1.40Е+015-5Г .
Н
М 1.20Е+015-Я
ев '
& 1.00Е+015-Я
И ■
^ 8.00Е+014 -
| 6.00Е+014-
4.00Е+014-нч _
2.00Е+014-
Ш<
Индексный алгоритм ] 2 порядка )3 порядка >4 порядка
0.00Е+000 'Ф"1!—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—|—I—г О 10 20 30 40 50 60 70 80 90 100 110 120
Время [секунды]
Рис. 7. Сравнение скоростей работы индексных алгоритмов генерации простых чисел на отрезке размером 5 '07 (считая от значения ординаты)
6.00Е+014 -5.40Е+014 -
й
| 4.80Е+014 -
в
Он
£ 4.20Е+014 -X
® 3.60Е+014 -Я"
ш 3.00Е+014 -
Я
&2.40Е+014 -
1 1.80Е+0014-Я
щ 1.20Е+0014-6.00Е+013 ■ 0.00Е+000 ■
Индексный алгоритм ЕВ 2 порядка ф 3 порядка ф 4 порядка
Ш
Ш
ш
А
■......гп
I I I I I I I I I I I I I I I I I
0 20 40 60 80 100 120 140 160 180 200 220 240 Время [секунды]
Рис. 8. Сравнение скоростей работы индексных алгоритмов генерации простых чисел на отрезке размером '09 (считая от значения ординаты)
шееся время работы по сравнению с
[2] обусловлено 64-битным представ-
лением чисел в упомянутой статье.
Использование представления mpz_t
из СМР дало возможность судить о
поведении алгоритмов за пределом 64-битного представления. На рис. 6 — 9 представлены результаты работы алгоритмов для соответствующих отрезков. Из рис. 6 видно, что для
миллионного отрезка индексный алгоритм второго порядка работает быстрее остальных, а четвертого — существенно отстает. Однако уже на отрезке 5-107 (рис. 7) видно, что индексный алгоритм третьего порядка по времени работы практически сравнялся по скорости с алгоритмом второго порядка, а на больших отрезках — стал работать быстрее. Аналогичная ситуация повторяется на отрезке 109 (рис. 8): индексный алгоритм четвертого порядка по времени работы сравнялся с индексным алгоритмом третьего порядка, а на отрезке 4-109 (рис. 9) — стал функционировать быстрее.
Таким образом, для больших отрезков индексные алгоритмы генерации простых чисел большего порядка работают лучше, чем для меньших. Напротив, для меньших отрезков индексные алгоритмы генерации простых чисел меньшего порядка работают лучше, чем для больших. Происходит это потому, что для большего отрезка увеличивается время определения соответствующих ему паттернов, согласно которым отсеиваются составные числа. Для меньшего отрезка наблюдается обратная ситуация — паттерны находятся быстрее.
Выводы
Л Развитие положений работ [1 — 2] связано с реализацией индексного принципа нахождения составных чисел, заключающегося в вычислении не самих чисел, а массива соответствующих им индексов. Такой подход способен существенно увеличить производительность алгоритмов вычисления простых чисел, а, следовательно, скорость факторизации составных чисел, что напрямую связано с алгоритмами шифрования конфиденциальной информации.
Кроме того, индексные алгоритмы ориентированы на решение задач:
♦ дальнейших исследований в области простых чисел, в частности — оценки распределения простых чисел в произвольном диапазоне, проверки решения открытых математических проблем;
♦ создания генератора случайных простых чисел для криптографических приложений;
♦ поиска оптимальных значений простых чисел при использовании хеш-
МЕТОДЫ
таблиц в базах данных и других задач, связанных с их применением. ^ Индексные алгоритмы в их текущей реализации представляют принципиально новый подход к поиску простых чисел. Однако требуется их оптимизация применительно к объему кэш-памяти используемого процессора. В то же время индексные алгоритмы с использованием кольцевой факторизации не требовательны к вычислительным ресурсам, поскольку оперируют с булевым массивом. Благодаря своей многозадачной структуре алгоритм легко модифицируется как многопоточный с реализацией на GPU. В частности они легко реализуемы при параллельном вычислении, используя кластерные вычислительные технологии NVIDIA CUDA [9-11], Open MP, простых чисел на отрезке размером 4109 (считая от значения ординаты) Open MPI и другие
Литература
1. Минаев В.А. Теорема о полном множестве простых чисел. — М.: НИЯУМИФИ, 2011. — 24 с.
2. Минаев В.А., Васильев Н.П., Лукьянов В.В., Никонов С.А., Никеров Д.В. Высокопроизводительный алгоритм, генерации простых чисел в произвольном, диапазоне./ Материалы XIV Международной научной конференции «Цивилизация, знаний: проблемы, и смыслы образования», 2013. — М.: РосНОУ.
3. Wheel factorization. — [Электронный ресурс]. URL: http://primes.utm.edu/glossary/xpage/WheelFactorization.html. (Дата обращения: 13.06.2013).
4. Wheel factorization — [Электронный ресурс]. URL: http://en.wikipedia.org/wiki/Wheel_factorization. (Дата обращения: 18.06.2013).
5. Минаев В.А. Простые числа: новый взгляд на закономерности формирования. — М.: Логос, 2011. — 80 с.
6. The first fifty million primes — [Электронный ресурс]. URL: http://primes.utm.edu/lists/small/millions/. (Дата обращения: 10.06.2013).
7. The Prime Pages (prime number research, records and resources) [сайт]. URL: http://primes.utm.edu/ (дата обращения. 17.02.2013)
8. Простые числа [сайт]. URL: http://ru.numberempire.com/primenumbers.php (дата обращения. 25.04.2013)
9. Cuda Best Practices Guide:: CUDA Toolkit Documentation [сайт]. URL: http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html (дата обращения. 07.02.2013)
10. Боресков А.В. Основы, работы, с технологией CUDA./ Харламов А.А. — М.: ДМК Пресс, 2010. — 232 с.
11. Параллельные вычисления, на GPU. Архитектура и программная модель CUDA: учеб. пособие./ Боресков А.В. и др. Предисловие.: В.А. Садовничий. — М.: Издательство Московского Университета, 2012. — 336 с.
1.60Е+014 и
nS 1.40Е+014 -
g- 1.20Е+014 -g
5 1.00Е+014 -
CÖ
er
N
g 8.00E+013 -
6
S 6.00E+013H
S 4.00E+013 -
Я п
2.00E+013-
0,00E+000
Индексный алтари™ ] 2 порядка )3 порядка > 4 порядка
т-1-1-1-1-1-1-1-1-1-1-1-1-1—"t-1-1-1-1-|-i
О 100 200 300 400 500 600 700 800 900 1000
Время [секунды]
Рис. 9. Сравнение скоростей работы индексных алгоритмов генерации