使用Raku中的惰性列表获取前10位素数

问题描述 投票:3回答:1

我正在尝试使用惰性列表获取第一个10位素数。这是我基于(已经给出的)用于计算素数的代码的观点:

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

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

该代码的问题是完成时间太长。

有没有一种快速的方法来获取第一个10位素数?

primes lazy-evaluation raku
1个回答
4
投票

您可以通过以下方法使其更快:

  • 从最小的10位数字开始(没有点经过一堆即使是质数也不会匹配的候选者)
  • 使用快速内置的is-prime方法而不是手动算法

因此得到:

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

哪个生产:

1000000007

您也可以过滤掉偶数,但是我怀疑is-prime拒绝它们的速度与您分别测试它们的速度一样快。 (此外,事实证明,该数字非常接近前10位数字,因此实际上除了说明1_000_000_000之外没有其他内容。)

© www.soinside.com 2019 - 2024. All rights reserved.