Вопрос касательно R-кода для округления простых чисел - PullRequest
1 голос
/ 27 марта 2019

Мне нужна функция, в которой, если введенное число является простым числом, оно должно округлять его до следующего простого числа, а если оно не округлять до предыдущего простого числа.

У меня есть этот код, чтобы определить, простое ли это число:

prime <- function(x) {
   if (x == 2) {
      print(3)
   } else if (any(x %% 2:(x-1) == 0)) {
      FALSE
     } else { 
      TRUE
   }
}

Я хочу добавить цикл while к истине и ложью, где, если функция ложна, она должна быть минус единица, пока не станет истиной, и если это правда, она должна добавить один, пока она снова не станет истиной, но я не уверен как это сделать.

1 Ответ

1 голос
/ 27 марта 2019

Используя вашу простую проверку,

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
...