我已经尝试了一段时间来编写一个带有两个参数的函数。一个是整数= n,另一个是逻辑参数。我该如何编写一个函数,如果逻辑参数为true,则返回向量中的前n个素数;如果逻辑参数为false,则返回第n个素数?
据我所知。
[]
必须显示的结果如下所示。
getprime <- function(n=0 , all=TRUE) {
if (n<=0) {
print("Not a valid number")
} else if (n>0) {
for (primen in 1:n) {
while (n %% 2:(n-1) == 0) {
n=n+1
print(n)
}
}
}
print(n)
}
答案 0 :(得分:1)
您可以编写一个递归函数(一个调用自身的函数)。除了两个自变量n
和all
之外,还需要一个计数器i
和一个素数primes
的(空)向量。
只要找到的质数的数量少于n
,该函数就会调用自身,并且每次调用它自己时,都会增加计数器变量i
。如果i
是质数,它将被添加到primes
向量中。
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))
}
}
}
结果是:
get_prime(7, TRUE)
[1] 2 3 5 7 11 13 17
get_prime(7, FALSE)
[1] 17