Нерекурсивный мод, использующий простую простую функцию, примерно такой же быстрый, как вы можете сделать это в R, ниже.Вместо того, чтобы перебирать каждое отдельное значение и проверять его простоту, он удаляет все кратные простых чисел в больших кусках.Это изолирует каждое последующее оставшееся значение как простое число.Таким образом, он принимает 2x, затем 3x, затем 4 исчезает, поэтому значения 5x уходят.Это наиболее эффективный способ сделать это в R.
primest <- function(n){
p <- 2:n
i <- 1
while (p[i] <= sqrt(n)) {
p <- p[p %% p[i] != 0 | p==p[i]]
i <- i+1
}
p
}
(вы можете захотеть увидеть этот вопрос о стеке для более быстрых методов, использующих сито, а также мои временные характеристики функции.выше будет работать 50, может быть, в 500 раз быстрее, чем версия, с которой вы работаете.)