В ряде областей науки и техники, например в теории кодирования, важно знать простые числа, близкие к числам определенного вида (чаще всего к степеням таких оснований, как 2, 3 и 10). Вне сомнения, их можно было бы найти в обычных таблицах простых чисел. Однако таблицы нужного размера не могли бы поместиться даже в многотомных изданиях. Поэтому существуют специальные таблицы, в которых приводятся только простые числа, близкие, например, к 2n, 3n и 10n.
Но составить такие таблицы для достаточно больших n довольно трудно, и, несмотря на компактность, такие таблицы зачастую весьма неполны. С помощью системы Mathematica несложно составить такие таблицы самостоятельно. Допустим, таблица должна содержать десять наибольших простых чисел, предшествующих N, и десять простых чисел, следующих за N. Можно ограничиться случаем достаточно больших N, например N>1000, поскольку при меньших N вопрос решается с помощью таблиц простых чисел, помещаемых обычно в учебниках для пятиклассников.
Давайте попытаемся составить нужную нам программу, например, для степеней 10. Чтобы результаты выглядели наглядно, нужно предусмотреть их преобразование в таблицу с помощью текстового процессора, например, Word. Поэтому необходимо предусмотреть такой формат результатов, который было бы легко отформатировать (преобразовать в таблицу). Для этого можно предусмотреть двоеточие : в качества разделителя колонок и два двоеточия : : в качестве разделителя строк таблицы. Вот как может выглядеть программа.
В этой программе использованы функции PreviouskPrimes и NextkPrimes. Функция PreviouskPrimes [N, k] должна генерировать k наибольших простых чисел, меньших Ж Иными словами, она должна генерировать k простых чисел, предшествующих N. Функция NextkPrimes [N, k] должна генерировать k наименьших простых чисел, больших N. Иными словами, она должна генерировать k простых чисел, следующих за N. Вот и все. Нам осталось только написать код этих двух функций. Давайте начнем с функции PreviouskPrimes [N, k].
PreviouskPrimes[n_Integer?(#>100&)
, k_Integer?Positive]:=
Block[{p=PreviousPrime[n] , i=l},
While[i<=k,
{Print[p,","],
p=PreviousPrime[p],++i}]]
NextkPrimes[n_Integer?(#>100&) ,
k_Integer?Positive]: = Block[{p=NextPrime[n],i=l},
While[i<=k,{Print[p,","],
p=NextPrime[p] , + + i} ]]
PreviouskPrimes[n_Integer?(#>100&),
k_Integer?Positive]:= Block[{p=PreviousPrime[n],i=l},
While[i<=k,(Print[p,","],
p=PreviousPrime[p]/++i}]]
PreviouskPrimes[1000,3]
997 ,
991 ,
983 ,
NextkPrimes[n_Integer?(#>100&),
k_Integer?Positive]:= Block[{p=NextPrime[n],i=l},
While[i<=k, {Print[p,","],p=NextPrime[p],++i} ]]
NextkPrimes[1000,3]
1009 ,
1013 ,
1019 ,
6 : <
999983 999979 999961 999959 999953
999931 999917 999907 999883 999863
1000003 1000033 1000037 1000039
1000081 1000099 1000117 1000121 1000133 1000151
7 :
9999991 ,
9999973 ,
9999971 ,
9999943 ,