Предположим, что мы хотим сгенерировать список простых чисел p, для которых p + 2 также просто.
Быстрое решение состоит в том, чтобы сгенерировать полный список первых n простых чисел и использовать функцию Select для возврата элементов, соответствующих условиям.
Select[Table[Prime[k], {k, n}], PrimeQ[# + 2] &]
Однако это неэффективно, поскольку он загружает большой список в память перед возвратом отфильтрованного списка. Цикл For с Sow/Reap (или l = {}; AppendTo[l, k]
) решает проблему с памятью, но она далека от элегантности и громоздка для реализации несколько раз в Mathematica script.
Reap[
For[k = 1, k <= n, k++,
p = Prime[k];
If[PrimeQ[p + 2], Sow[p]]
]
][[-1, 1]]
Идеальное решение было бы встроенной функцией, которая позволяет вариант, подобный этому.
Table[Prime[k], {k, n}, AddIf -> PrimeQ[# + 2] &]