Количество простых чисел на открытом слева отрезке (а b]
Количество простых чисел на открытом слева отрезке (а, b]
С помощью функции PrimePi несложно подсчитать и количество простых чисел на открытом слева отрезке (а, b]. Помните только, что если вы пользуетесь выражением k(b)-n(а), т.е. выражением PrimePi [b] -PrimePi [a], то в случае простоты простое число b будет посчитано, а простое число а — нет. Иными словами, подсчет осуществляется на открытом слева отрезке (а, b]. А что, если нужно посчитать простые числа на замкнутом с обоих концов отрезке [а, b}1 Ничего сложного: в качестве аргумента можно взять не а, а несколько меньшее число, ведь аргументом функции 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)]
Результаты отформатированы в виде таблицы.