在Perl 6中生成素数列表非常容易:
my @primes = (^?).grep: *.is-prime;
Run Code Online (Sandbox Code Playgroud)
如果你需要相对较少数量的素数,这种方法就足够了,但对于大数字来说效率非常低,因为每个数字都是独立检查的.
有没有办法访问Perl 6的内置主要检查逻辑,以有效地创建素数列表?否则我需要自己建一个筛子.很容易,但我担心高级Perl 6代码中的筛子几乎和我开始使用的代码一样低效.
如果您运行程序--profile
,您将看到超过99%的时间用于Int.is-prime
.由于这实际上只是一个包装器nqp::isprime_I()
,我试图在没有包装器的情况下运行类似的代码.但这并没有明显改变.因此,工作的主要内容正在进行中nqp::isprime_I()
.
因此,您真正拥有的唯一选择是并行搜索素数.在(更近的)未来,hyper
将是你的朋友.但目前处于"最初的初始实施"阶段,正在讨论更强大的实施方案:https://gist.github.com/jnthn/6a80a9712fb38b32537f9f0e46fca6d7
在此之前,如果您希望更快地运行,则必须手动分解要检查准备的值的范围并在start
块中运行它们,并从结果中收集结果Promise
.