Привет, мне просто нужна помощь в понимании этой строки кода из функции, чтобы получить простые числа (см. Ниже всю функцию):
if (i == 2L || all(i %% 2L:ceiling(sqrt(i)) != 0))
Что делает i == 2L
так же, как ceiling(sqrt(i))
. Эта функция в основном просто генерирует вектор простых чисел или просто возвращает последнее простое число в векторе. Я не совсем понимаю, для чего используются эти 2 раздела.
Обычно я просто проверял бы простое число, подобное этому 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))
}
}
}