0

可能重复:
在 R 中生成一个素数列表,最多达到一定数量

在 R 语言中找到指定范围内的所有素数的优雅方法是什么?

4

1 回答 1

1

这是一个适用于窄范围的单行示例:特别重要的是,范围的底部大于顶部的平方根。大范围也可能存在内存问题。

library(matrixStats)

pRange <- function(a,b) which(!rowCounts(!outer(a:b,2:sqrt(b),FUN="%%")))+a-1

例如

> pRange(1e8, 1e8+1e3)
 [1] 100000007 100000037 100000039 100000049 100000073 100000081 100000123
 [8] 100000127 100000193 100000213 100000217 100000223 100000231 100000237
[15] 100000259 100000267 100000279 100000357 100000379 100000393 100000399
[22] 100000421 100000429 100000463 100000469 100000471 100000493 100000541
[29] 100000543 100000561 100000567 100000577 100000609 100000627 100000643
[36] 100000651 100000661 100000669 100000673 100000687 100000717 100000721
[43] 100000793 100000799 100000801 100000837 100000841 100000853 100000891
[50] 100000921 100000937 100000939 100000963 100000969

在许多情况下,最好使用前面问题中约翰版本的筛子并删除不需要的较低值可能会更快。

于 2011-05-01T19:00:55.380 回答