scala: проверить, является ли простое число циклом while - PullRequest
0 голосов
/ 06 января 2020

Ищем пример кода, чтобы узнать, является ли данное число простым числом или не использует какое-то время l oop. Я знаю, что могу использовать следующую функцию, но мне нужно использовать некоторое время l oop для этого упражнения.

def isPrime5(num: Int): Boolean =
  (2 to math.sqrt(num).toInt) forall(x => num % x != 0)

(1 to 20).foreach(i => if (isPrime5(i)) println("%d is prime5".format(i)))

1 Ответ

5 голосов
/ 06 января 2020

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

def isPrime(num: Int): Boolean = {
  var n = 2
  val threshold = math.sqrt(num)
  while (n <= threshold) {
    if (num % n == 0) {
      return false
    }
    n += 1
  }
  return true
}

for (n <- 1 to 20 if isPrime(n)) {
  println(s"$n is prime")
}

Примечания:

  1. Это одна портирование вашего кода с помощью цикла while; пожалуйста, обратите внимание, что есть ошибка (а именно, 1 не простое число)
  2. Я реорганизовал «тест», где вы печатаете простые числа от 1 до 20 в целях понимания
  3. Императивные конструкции как и изменчивость, циклы while и ранние возвраты обычно используются в качестве крайней меры в мире Scala для весьма специфической проблемы c, которая может выиграть от использования этого подхода (разработчик может оценить, когда это имеет смысл)
  4. В частности, использование return в Scala может привести к семантичным c отличиям от использования более широко принятого механизма возврата, позволяющего последнему выражению метода определять возвращаемое значение самого метода ( подробнее об этом здесь )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...