R语言实现找出1到n之间的所有质数
以下是用R语言编写的函数实现对于任意给定的一个数n,找出1 到n 之间的所有质数:
prime_numbers <- function(n) {
primes <- c()
for (i in 2:n) {
if (all(i %% primes != 0)) {
primes <- c(primes, i)
}
}
return(primes)
}
解释:
-
定义一个空向量
primes来存储找到的质数。 -
从 2 开始遍历到 n,依次判断每个数是否为质数。
-
如果某个数 i 能够整除已经找到的质数,那么它一定不是质数,跳过该数。
-
如果某个数 i 不能够整除已经找到的质数,那么它可能是质数,将其加入
primes中。 -
遍历结束后,返回找到的所有质数。
注意:
-
在判断一个数是否为质数时,我们只需要判断它能否整除比它小的质数即可,因为如果有比它小的非质数能够整除它,那么这个数一定能够整除比它小的某个质数。
-
为了减少计算量,我们可以只遍历到 $\sqrt{n}$,因为如果一个数不是质数,那么它一定能够分解成两个因子,其中至少一个小于等于 $\sqrt{n}$。
-
在判断一个数 i 能否整除已经找到的质数时,我们使用了 R 语言的
all函数,它会返回一个布尔值,表示所有元素是否均为 TRUE。如果已经找到的质数中有任意一个数能够整除 i,那么i %% primes就会返回一个零元素,否则返回一个非零元素,取反后就是 TRUE。因此,如果all(i %% primes != 0)为 TRUE,说明 i 不能够整除任何一个已经找到的质数,即 i 是质数。
原文地址: https://www.cveoy.top/t/topic/n6I1 著作权归作者所有。请勿转载和采集!