Самое большое простое число до 100

Что такое простые числа, для тех кто не знает поясняю.

Простое число это такое положительное число, которое делиться только на себя и на единицу.

Примеры простых чисел до 100: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97.

Существует алгоритм нахождения простых чисел предложенный Эратосфеном (275-194 до н.э., Греция), который разработал ‘сито’, чтобы найти простые числа.

Сито, как фильтр, который используется для фильтрации всех чисел, в результате чего остаються только простые числа.
По методу решета Эратосфена, чтобы найти простые числа до 100, нужно сделать схему натуральных чисел. Возьмем на примере числа от 1 до 100:

1 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
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

Шаг 1. Нужно вычеркнуть все числа кратные 2, т.е. каждое 2 число начиная с 4.

Шаг 2. Нужно вычеркнуть все числа кратные 3, т.е. каждое третье число начиная с 3. Возможно некоторые числа уже будут вычеркнуты, такие как например 6, т.к. оно было кратно 2.

Кажый 4 вычеркивать не нужно, т.к. мы их уже вычеркнули когда вычеркивали 2.

Читайте также  Проверить базу sql на ошибки

Шаг 3. Далее нужно вычеркнуть все числа кратные 5, т.е. каждое пятое число начиная с 5. Возможно некоторые числа уже будут вычеркнуты, как и в прошлом случае.

Нужно продолжать это делать, пока все номера до 100 не будут вычеркнуты.

Таким образом оставшиеся номера и будут простыми числами.

Ниже приведена таблица простых чисел от 2 до 10000 (1229 штук). Единица не включена, извините. Некоторые считают, что единица не включена поскольку. она и не может там быть. "Простым числом называются числа имеющие два делителя: единицу и само число." А число 1 имеет только один делитель, оно не относится ни к простым, ни к составным числам. (толковое замечание от Ольги 21.09.12) Мы, тем не менее помним, что простые числа вводятся иногда и так: "Простым числом называются числа которые делятся нацело на единицу и само себя." В этом случае единица, очевидно, является простым числом.

Таблица простых чисел от 2 до 1000. Таблица простых чисел от 2 до 1000 выделена серым.

Давеча снова увлекся простыми числами. Манит меня их тайна.

Написал алгоритм, похожий на решето Эратосфена. За 3 часа программа нашла 700 тысяч первых простых чисел. А мне надо хотя бы 14 миллионов простых чисел, чтобы перемножив их, получить число с количеством десятичных цифр, равным 100 миллионам штук.

Из статьи «Еще раз о поиске простых чисел», написанной пользователем Bodigrim, узнал о существовании быстрой программы primegen, которая работает используя решето Аткина. Установил ее в виртуальной машине LUbuntu (VirtualBox). Действительно, primegen очень быстро работает!

Тогда встал вопрос, как сохранить 14 миллионов простых чисел? Можно просто каждое простое число записать в файл как int32. А если простое число будет больше мощности 32-х бит?

Читайте также  Программа для восстановления старых фото

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

Осталось узнать максимально-возможное расстояние для определенного диапазона чисел. Поскольку разница между простыми числами всегда есть четное число (кроме расстояния между 2 и 3), то разделим расстояние на 2.

В программе primegen в исходном файле primes.c вместо вывода числа на экран реализовал алгоритм подсчета статистики по кол-ву расстояний между числами:

В терминале выполнил:

Через 10 секунд отобразился список:

0 = 1 (расстояние между числами 2 и 3)
1 = 3424507

141 = 1

Таким образом, 141 — максимально-возможное расстояние по простое число значением до 1 миллиарда.

Написал код записи в файл:

Запустил до 300 миллионов:

В файле primes.bin получил 16 миллионов первых простых чисел. Сжал архиватором 7-Zip, файл ужался до 9 Мб.

P.S. Есть идея, как еще сильнее сжать БД простых чисел. Надо простые числа разделить на 4 группы по последней десятичной цифре: 1, 3, 7, 9. Расстояние между числами делить на 10. Так же сформировать 4 файла. При этом возможно, что для значений расстояния можно будет отвести не 8 бит, а меньше, тогда придется реализовать формирование байтового буфера из, например, 5-битных расстояний.

Хотя в наш век Гигабайтных емкостей это не сильно принципиально.

Ссылка на основную публикацию
Adblock
detector