如何创建一个返回向量中前N个质数的循环?

时间:2019-03-28 14:16:17

标签: r function loops

我已经尝试了一段时间来编写一个带有两个参数的函数。一个是整数= 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)
}

1 个答案:

答案 0 :(得分:1)

您可以编写一个递归函数(一个调用自身的函数)。除了两个自变量nall之外,还需要一个计数器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