【发布时间】:2019-03-28 19:34:08
【问题描述】:
您好,我只需要一些帮助来理解从函数中获取素数的这行代码(整个函数见下文):
if (i == 2L || all(i %% 2L:ceiling(sqrt(i)) != 0))
i == 2L 的作用与ceiling(sqrt(i)) 一样。这个函数基本上只是生成一个素数向量或只返回向量中的最后一个素数。我不太明白这两个部分的用途。
通常我只会检查像这样的素数all(i %% 2:(i-1) !=0) 那么为什么这两个元素在代码中发生了变化?
get_prime <- function(n, all = TRUE, i = 1, primes = c()){
if ( n <= 0) {
stop("Not a valid number")
}
if (length(primes) < n) {
if (i == 2L || all(i %% 2L:ceiling(sqrt(i)) != 0)) {
get_prime(n, all = all, i = i + 1, primes = c(primes, i))
} else {
get_prime(n, all = all, i = i + 1, primes = primes)
}
} else {
if (all) {
return(primes)
} else {
return(tail(primes, 1))
}
}
}
【问题讨论】:
-
好吧,我明白
ceiling(sqrt(i))只是你应该检查的素数但只是i == 2L我不明白 -
2L是类integer中的数字2,而不是numeric,如果你输入2,你会得到它。不过,不知道你为什么需要它