Тестирование простого числа с помощью цикла 1: sqrt (x) - PullRequest
0 голосов
/ 04 апреля 2019

Я изучаю циклы, и у меня есть этот код, чтобы проверить, является ли число простым или нет, но не работает. Где ошибка?

x <- 7
y <- seq(1,sqrt(x),by=1)
for(i in 1: sqrt(x)){
 if(y[x%%y == 0]) {
   print("FALSE")
 }else{
   print("TRUE")
 }
}

Это дает мне правильное решение, но повторяет ответ столько раз, сколько элементов в i. Также я хотел бы спросить, как использовать функцию внутри for с if:

i <- c(1: sqrt(x))
y3 <- x%%i == 0
y4 <- y3[-1] 
for(value in i){
  if(y4 == FALSE) {
    print("TRUE")
  }else{
    print("FALSE")
  }
}

версия 3, дает мне решение, но для каждого элемента в i:

x <- 107
i <- c(1: sqrt(x))
y3 <- c(x%%i == 0)
y4 <- y3[-1] 
for(value in i){
  if(all(y4==F)) {
    print("TRUE")
  }else{
    print("FALSE")
  }
}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Поскольку вы упомянули, что вы должны использовать цикл, будет работать следующий код:

x <- 7
y <- seq(1, ceiling(sqrt(x)), by=1)

# is.factor is a vector which checks whether each element in y is a factor or not
# initialize to F
is.factor = F

# Start at y = 2 because 1 will be a factor
for(i in 2:length(y) ){

  # Check whether current value in vector is a factor of x or not
  # if not a factor, set value in index to F, otherwise set to T 
  ifelse( x%%y[i] != 0, is.factor[i] <- F, is.factor[i] <- T)

  # If we are at the last element in y, print a result
  if(i == length(y)){

    # check if we have any factors. 
    # if we have any factors (i.e. any index in is.factor vector is T), then number is not prime
    ifelse( any(is.factor), print("FALSE"), print("TRUE") ) 
  }

}
0 голосов
/ 04 апреля 2019

Вы можете сделать это -

check_prime <- function(num) {
    if (num == 2) {
        TRUE
    } else if (any(num %% 2:(num-1) == 0)) {
        FALSE
    } else { 
        TRUE
    }
}

> check_prime(7)
[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...