Получение первого 10-ди git простого числа с помощью ленивых списков в Раку - PullRequest
7 голосов
/ 18 января 2020

Я пытаюсь получить первое 10-ди git простое число, используя ленивые списки . Вот мой пример, основанный на (уже данном) коде для вычисления простых чисел:

my @primes = 2,3,5, {first * %% none(@_), (@_[*-1] ... Inf)} ...  -> $s {$s.chars == 10};

say @primes[@primes.elems-1];

Проблема с этим кодом состоит в том, что для завершения sh.

требуется слишком много времени. Есть ли какой-нибудь быстрый способ получить это первое 10-диное git простое число?

1 Ответ

11 голосов
/ 18 января 2020

Вы можете сделать это быстрее:

  • Начиная с наименьшего числа 10 di git (нет смысла проходить через группу кандидатов, которые никогда не будут совпадать, даже если они простые)
  • Использование быстрого встроенного метода is-prime вместо алгоритма ручной прокрутки

Таким образом получается:

say (1_000_000_000..*).first(*.is-prime)

, который производит:

1000000007

Вы также можете отфильтровывать чётные записи, но я подозреваю, что is-prime отклоняет их так же быстро, как вы бы отдельно их проверяли. (Кроме того, оказывается, что число настолько близко к первому 10-ди git числу, что на практике ничего, кроме заявления в 1_000_000_000, не имеет значения.)

...