我试图使用以下代码行计算第一个x
素数:
(1 to Int.MaxValue).filter(is_prime _).take(x)
然而,该程序并没有停止,我不得不关闭它(我不想等到达到Int.MaxValue)。我怎么能在正常时间重写这个以保持简洁?
答案 0 :(得分:5)
您也可以使用Stream(或Iterator - 请参阅下面的评论)
Stream.from(1).filter(is_prime).take(x)
答案 1 :(得分:2)
Range
将使用过滤器遍历整个集合。请尝试使用view
代替:
(1 to Int.MaxValue).view.filter(is_prime _).take(x)