Иллюстрированный самоучитель по Mathematica 5

Поиск отрезков натурального ряда, состоящих только из составных чисел

Однако полезнее эту функцию модифицировать так, чтобы она выводила на печать только длину отрезка и его начало.

CompositeRunsStart[n_Integer ? Positive] := Block[{pi, p2 = 3, i = 2}, While[{pi, p2} = {p2, Prime[++i]}; p2 - pl < n + 1]; Print[{n, p1 - H}]]

Тогда вывод выглядел бы так (конец обрезан).

Иллюстрированный самоучитель по Mathematica 5 › Арифметика: простые числа › Поиск отрезков натурального ряда, состоящих только из составных чисел

Однако среди этой информации все еще слишком много шума. Логично было бы исключить избыточную информацию:

{1.4}
{3.8}
{5.24}
{7.90}
{13.114}

Таблица стала, как видим, значительно компактнее и информативнее. Однако для построения такой таблицы ни функцией CompositeRuns, ни функцией CompositeRunsStart пользоваться не выгодно: обе функции начинают вычисления, не используя уже вычисленных значений, и потому при построении такой таблицы для каждого ее значения начинали бы вычисления с самого начала. Поэтому для построения такой таблицы лучше воспользоваться специальной программой. Для начала подойдет, например, следующая программа.

Иллюстрированный самоучитель по Mathematica 5 › Арифметика: простые числа › Поиск отрезков натурального ряда, состоящих только из составных чисел

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

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

LargestPrimeGap[n_Integer ? (# < 3 & )] := Max[Drop[f, 1] - Drop[#, -1] & [Prime/@Range[2, PrimePi[n]]]]
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.