Сколько простых чисел до миллиарда
Перейти к содержимому

Сколько простых чисел до миллиарда

  • автор:

Простые числа между 1 и 1000000

Простые числа до 1000000. Простые числа до 1000000.

https://calculat.io/ru/number/prime/1—1000000/generated.jpg

О калькуляторе «Список простых чисел»

Данный калькулятор покажет список простых чисел между заданными числами. Например, он поможет узнать какие простые числа между 1 и 1000000? Выберите начальное число (например ‘1’) и конечное число (например ‘1000000’). После чего нажмите кнопку ‘Посчитать’.

Простые числа - это положительные целые числа, имеющие только два делителя - 1 и само себя.

Простые числа между 1 и 1000000000

Простые числа до 1000000000. Простые числа до 1000000000.

https://calculat.io/ru/number/prime/1—1000000000/generated.jpg

О калькуляторе «Список простых чисел»

Данный калькулятор покажет список простых чисел между заданными числами. Например, он поможет узнать какие простые числа между 1 и 1000000000? Выберите начальное число (например ‘1’) и конечное число (например ‘1000000000’). После чего нажмите кнопку ‘Посчитать’.

Простые числа - это положительные целые числа, имеющие только два делителя - 1 и само себя.

Таблица простых чисел – онлайн калькулятор

Онлайн калькулятор для получения списка или таблицы простых чисел в заданном промежутке – от миллионов до миллиардов и намного больше. Имеется возможность поиска простых чисел, имеющих более 16-ти разрядов в десятичной системе исчисления, используя длинную арифметику.

Онлайн калькулятор

Найти простые числа в промежутке:

Результат вычислений

Вычисления были прерваны пользователем!

Затраченное время: 0 мс. Число найденных чисел: 168.

Таблица простых чисел в промежутке от 1 до 1000
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 101 103 107 109 113 127 131 137 139 149 151
157 163 167 173 179 181 191 193 197 199 211 223
227 229 233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349 353 359
367 373 379 383 389 397 401 409 419 421 431 433
439 443 449 457 461 463 467 479 487 491 499 503
509 521 523 541 547 557 563 569 571 577 587 593
599 601 607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733 739 743
751 757 761 769 773 787 797 809 811 821 823 827
829 839 853 857 859 863 877 881 883 887 907 911
919 929 937 941 947 953 967 971 977 983 991 997

Ход вычислений

Выполняется поиск простых чисел

Число найденных простых чисел:

Описание калькулятора

Выбор промежутка

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

  • Приблизительное количество простых чисел, не превосходящих определяется по асимптотической формуле:
    .
    Тогда примерное количество простых чисел в промежутке :
    .
    Задание слишком большого промежутка может привести к переполнению памяти, используемой браузером для вывода результатов.
  • Первые 9592 простых чисел (до 99991 ) заложены в памяти программы. Остальные вычисляются колесным методом.
  • Время вычислений растет с увеличением значений исследуемых натуральных чисел, входящих в промежуток .
  • Калькулятор позволяет выполнять расчеты с использованием длинной арифметики при N 2 > 9007199254740991 . Однако время, затраченное на исследование одного натурального числа, сильно увеличивается, и составляет около 1 секунды для чисел, не сильно превышающих 9007199254740991 .
  • Теоретически, максимально возможное значение равно 81129638414606663681390495662081 .

Дополнительные настройки

Число столбцов таблицы

Если ввести значение 0, то число столбцов таблицы рассчитывается автоматически.

Порядок колеса N

При фильтрации колесным методом, из ряда натуральных чисел удаляются элементы, делящиеся без остатка на первые N простых чисел.
См. Колесный метод фильтрации простых чисел

Задержка τ для отображения хода вычислений

Если время расчета превышает 1 секунду, то, после полной обработки исследуемого числа, происходит остановка расчетов, чтобы браузер отобразил текущие результаты во всплывающем окне хода вычислений. Через промежуток времени τ исследования чисел возобновляются. Если браузер не успевает показать прогресс вычислений, то можно увеличить τ, чтобы дать больше времени на отображения обработанных результатов. Прерывание расчетов происходит только после полной обработки текущего числа. До тех пор, пока этого не произойдет, изменений в окне хода вычислений не будет. Поэтому при расчете больших чисел возможно увеличение времени между обновлениями в окне хода вычислений.

Применяемый метод поиска простых чисел

Стандартный метод и его оптимизация

Пусть мы хотим найти все простые числа из промежутка . Самое легкое – взять каждое натуральное число из этого промежутка: , и проверить, является ли оно простым. Для этого нужно найти остатки от деления числа на все натуральные числа , не превышающие . Если все остатки не равны нулю, то число простое. Если хотя бы один остаток равен нулю: , то делится на . Поэтому не является простым.

Можно сократить объем вычислений, если в качестве перебирать не все натуральные числа, а только простые. Тогда для исследования числа нам потребуется вычислить не более остатков . Недостатком такой оптимизации является то, что для этого нужно хранить в памяти компьютера значений простых чисел , не превосходящих . Этот метод позволяет сократить объем вычислений, но при больших требуется большой объем памяти, что может привести к существенному снижению производительности вычислительной машины.

В этом калькуляторе использован другой способ оптимизации вычислений, основанный на фильтрации рядов и . Так, все четные числа, кроме двойки, не являются простыми. Поэтому из рядов и можно исключить четные числа. Тогда объем вычислений сократится более чем в два раза. Но также можно исключить числа, которые делятся на 3, 5, и так далее. Такая фильтрация выполняется с помощью колесного метода.

Колесный метод фильтрации простых чисел

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

Элементы ряда определяются по формуле:
(1) .
Таким образом, для построения колесным методом отфильтрованного ряда, содержащего все простые числа, мы выполняем следующие шаги.
1) Выбираем порядок колеса .
2) Определяем значения спиц .
3) Определяем значения элементов ряда по формуле (1).
4) Добавляем к ряду числа, образующие колесо, .

Пример. Для имеем.
Числа, образующие колесо: .
Примориал: .
Число спиц колеса: .
Значения спиц:

.
Прибавляя к ним примориал, мы получим значения элементов следующего оборота колеса. И так далее, последовательно прибавляя к новым значениям примориал, получаем элементы ряда натуральных чисел, из которых исключены элементы, делящиеся на 2,3,5,7.
Доля чисел, прошедших фильтр равна доле чисел в колесе:
.
Таким образом, используя колесный метод с , из ряда натуральных чисел мы убираем 77,14% чисел, которые делятся на 2, 3, 5, 7 и, следовательно, не являются простыми.

Эффективность колесного метода

Чем меньше доля чисел, прошедших фильтр, тем меньше операций нам нужно выполнить для получения списка простых чисел в заданном промежутке. Эта доля уменьшается при увеличении порядка колеса. Однако увеличение порядка приводит к увеличению числа спиц и, следовательно, к увеличению занимаемого ими объема памяти. Оказывается, что с ростом , доля чисел, прошедших фильтр снижается незначительно, в то время как объем занимаемой памяти растет очень сильно, быстрее экспоненты. Для выполнения расчетов, наиболее подходящими, являются значения порядка колеса от 4 до 6, .

В приведенной ниже таблице приведены значения числа спиц и доли чисел в колесе при разных значениях порядка .

Порядок колеса Примориал Число спиц Доля чисел,
прошедших фильтр
1 2 1 0,5
2 6 2 0,3333
3 30 8 0,2667
4 210 48 0,2286
5 2 310 480 0,2078
6 30 030 5 760 0,1918
7 510 510 92 160 0,1805
8 9 699 690 1 658 880 0,1710
9 223 092 870 36 495 360 0,1636
10 6 469 693 230 1 021 870 080 0,1579

Использованная литература.
Поиск простых чисел. Учебные материалы по информатике для школьников при мехмате 54 школы г. Москвы.

Автор: Олег Одинцов . Опубликовано: 26-08-2022

База данных простых чисел

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

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

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

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

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

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

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

 int RastCount_Index = 0; int RastCount[1000]; for(i=0;i < 1000; i++) RastCount[i] = 0; for (;;) < u = primegen_next(&pg) - p; p += u; if (p >high) break; for (i = 0;u;++i) < u += digits[i]; if (u >= 200) < digits[i] = u % 10; u = u / 10; >else < digits[i] = mod10[u]; u = div10[u]; >> if (i > len) len = i; int LetsRast, index; LetsRast = 0; index = 0; char r[40], r_old[40]; for (i = 0;i < 40; i++) < r[i] = 0; r_old[i] = 0; >for (i = len - 1;i >= 0;--i) < if (! LetsRast) if (digits_old[i] != digits[i]) LetsRast = 1; if (LetsRast) < r[index] = '0' + digits[i]; r_old[index] = '0' + digits_old[i]; index++; >> int ri, ri_old, Rast; ri = atoi(r); ri_old = atoi(r_old); Rast = (ri - ri_old) >> 1; RastCount[Rast]++; if (Rast > RastCount_Index) RastCount_Index = Rast; for (i = len-1;i >= 0; i--) digits_old[i] = digits[i]; > for(i = 0; i  

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

./primes 1 1000000000 

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

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

141 = 1

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

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

FILE* fd; fd = fopen("primes.bin", "w+"); unsigned char b1[1]; b1[0] = Rast; fwrite(b1,1,1,fd); fclose(fd); 

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

./primes 1 300000000

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

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

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

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

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