Количество простых чисел на открытом слева отрезке (а, b]
С помощью функции PrimePi несложно подсчитать и количество простых чисел на открытом слева отрезке (а, b]. Помните только, что если вы пользуетесь выражением k(b)-n(а), т.е. выражением PrimePi [b] – PrimePi [a], то в случае простоты простое число b будет посчитано, а простое число а – нет. Иными словами, подсчет осуществляется на открытом слева отрезке (а, b].
А что, если нужно посчитать простые числа на замкнутом с обоих концов отрезке [а, b}? Ничего сложного: в качестве аргумента можно взять не а, а несколько меньшее число, ведь аргументом функции PrimePi может быть любое вещественное положительное число. Давайте посчитаем, например, количество простых чисел в 1-й, 2-й,…, 20-й сотне миллионов натуральных чисел. Вот как это можно сделать.
delta = 100000000; PrimePiAB[delta_Integer ? Positive, xk_Integer ? Positive] := Block[{k = 0, x = delta, kt = 0}, While[x <= xk, { kt = PrimePi[x]; Print[x, ":", kt, ":", kt - k]; k = kt; x = x + delta }] ] PrimePiAB[delta, 10 delta]Полученные результаты удобно представить в виде таблицы.
В приведенной выше программе мы воспользовались тем, что интервалы примыкают друг к другу. Однако так бывает не всегда. Иногда нужно подсчитать количество простых чисел в интервалах заданной длины, причем начала интервалов расположены на числовой оси так, что конец очередного интервала не совпадает с началом следующего. Подсчитаем, например, количество простых чисел в интервалах длиной 150000, причем пусть начинаются эти интервалы в точках х= 106, 107,…, 1014. Для этого случая пригодится следующая функция.
DeltaPi[x_, delta_] := Block[{xk = x + delta, k = PrimePi[xk]}, Print[x, "-", xk, ":", k - PrimePi[x]]]С помощью этой функции нетрудно написать и нужную нам программу.
delta = 150000; Do[DeltaPi[10 ^ n, delta], {n, 6.14}]Результаты отформатированы в виде таблицы.
Резюме
Хотя каждый математик знает, ох, как это непросто, нужно признать, что система Mathematica дружит с простыми числами. В ней есть функции, проверяющие, является ли число простым; функция, генерирующая n-е простое число; функция, генерирующая следующее простое число; функция, генерирующая предыдущее простое число; а также знаменитая функция n(х), подсчитывающая количество простых чисел, не превосходящих заданного числа х. Конечно, реализовать все эти функции весьма непросто, и применяя их, нужно учитывать ограничения на их аргументы. Но как бы то ни было, в системе Mathematica они реализованы на современном уровне, с учетом совсем недавно доказанных теорем и новых методов.
