Lar*_*een 8 primes lazy-evaluation raku
我正在尝试使用惰性列表获取第一个 10 位素数。这是我根据(已经给出的)计算素数的代码得出的结论:
my @primes = 2,3,5, {first * %% none(@_), (@_[*-1] ... Inf)} ... -> $s {$s.chars == 10};
say @primes[@primes.elems-1];
Run Code Online (Sandbox Code Playgroud)
该代码的问题在于完成时间太长。
有没有什么快速的方法可以得到第一个 10 位质数?
Jon*_*ton 12
您可以通过以下方式使其更快:
is-prime方法而不是手动算法从而得到:
say (1_000_000_000..*).first(*.is-prime)
Run Code Online (Sandbox Code Playgroud)
其中产生:
1000000007
Run Code Online (Sandbox Code Playgroud)
您也可以过滤掉偶数,但我怀疑is-prime会以您单独测试它们的速度拒绝它们。(此外,事实证明该数字与第一个 10 位数字非常接近,因此除了1_000_000_000在实践中说明之外没有任何其他意义。)