#r #while-loop #primes
#r #цикл while #простые числа
Вопрос:
Мне нужно иметь функцию, в которой, если введенное число является простым числом, оно должно округлять его до следующего простого числа, а если нет, то округлять в меньшую сторону до предыдущего простого числа.
У меня есть этот код, чтобы определить, является ли это простым числом:
prime <- function(x) {
if (x == 2) {
print(3)
} else if (any(x %% 2:(x-1) == 0)) {
FALSE
} else {
TRUE
}
}
Я хочу добавить цикл while к true и false, где, если функция имеет значение false, она должна уменьшать единицу, пока не станет true, и если это true, она должна добавлять единицу, пока снова не станет true, но я не уверен, как это сделать.
Ответ №1:
Использование вашей программы проверки простых чисел,
prime <- function(x) {
if (x == 2) {
print(3)
} else if (any(x %% 2:(x-1) == 0)) {
FALSE
} else {
TRUE
}
}
Мы создаем new
функцию, сначала мы проверяем, является ли наше число простым, если да, то добавляем 1, пока не достигнем следующего простого числа. Если это не простое число, мы минус 1, пока оно не станет простым.
new <- function(x){
if (isTRUE(prime(x))){
x = x 1
while(prime(x) == FALSE){
x = x 1
}
return(x)
} else {
while(prime(x) == FALSE){
x = x-1
}
return(x)
}
}
мы получаем
> new(7)
[1] 11
> new(10)
[1] 7