- Котлин: список простых чисел до n
- 3 ответа
- Программа Kotlin для проверки того, является ли число простым или нет
- Пример 1: Программа для проверки простого числа с использованием цикла for-in
- Пример 2: Программа для проверки простого числа с использованием цикла while
- Получить список простых чисел, присутствующих в массиве
- Решение
Котлин: список простых чисел до n
Я пытаюсь сделать функцию в kotlin, чтобы возвращать список простых чисел до входного аргумента n. Я пробовал код ниже, но он возвращает список с несколькими одинаковыми цифрами.
/** * You can edit, run, and share this code. * play.kotlinlang.org */ fun main() < fun primes(n : Int):MutableList < var li : MutableList= mutableListOf(2) for(num in 2..n+1) < for(i in 2..num)< if(num % i == 0) break else li.add(num) >> return li > print(primes(7)) >
3 ответа
fun primes(n : Int):MutableList < var li : MutableList= mutableListOf(2) for(num in 2..n+1) < for(i in 2..num)< if(num % i == 0)< if(num==i) li.add(num) else break >> > return li >
В основном вы ломаетесь, когда num делится на i , а это не одно и то же число
это исправит добавление числа для каждого неделимого числа, меньшего, чем num
Это добавляет num в список li один раз для каждого i меньше, чем num , который не делит num . Например, для num == 5 мы проверяем 2, 3 и 4, и для каждого из них мы добавляем 5 в список, поэтому он появляется три раза.
Вместо того, чтобы break выходить из внутреннего цикла, попробуйте continue выйти из внешнего цикла (который также прерывает внутренний цикл). Если внутренний цикл завершается, только тогда вы должны добавить num в список простых чисел:
outer@for(num in 2..n+1) < for(i in 2..num)< if(num % i == 0) < continue@outer; // Not a prime. Continue with the next candidate. >> li.add(num) // No divisors found. It must be prime! >
Это яркий пример (!) Того, где цикл можно заменить кодом более функционального стиля — в данном случае none() функция:
fun primes(n: Int): MutableList < val li = mutableListOf() for (num in 2..n) < if ((2 until num).none< num % it == 0 >) li.add(num) > return li >
Для пояснения: функция none() возвращает истину только в том случае, если лямбда возвращает ложь для каждого элемента списка. И it означает значение параметра (представьте it -> в лямбде). Таким образом, он проверяет, не может ли число делиться ни на одно из чисел от 2 до числа-1 (что, конечно, является определением простого числа). Это не только короче, но и, надеюсь, легче читается. (Конечно, если вы привыкнете к функциональному стилю.)
Фактически, вы также можете заменить внешний цикл и сделать все это однострочным:
fun primes(n: Int) = (2..n).filter < num ->(2 until num).none < num % it == 0 >>
Эта версия чисто функциональна, но, возможно, слишком сжата, чтобы ее было легко читать. Он принимает числа от 2 до n и сохраняет только простые числа (как описано выше). ( filter() возвращает список, поэтому нет необходимости создавать его вручную.)
Однако с алгоритмической точки зрения нет необходимости проверять каждый возможный делитель вплоть до числа, которое вы тестируете — вам нужно только проверять простые делители. Это более эффективный подход. Поскольку он использует список простых чисел, которые вы уже нашли, вы не можете сделать это с помощью простого filter() , как во втором примере. Но вы можете легко настроить первый пример для этого: просто замените if ((2 until num).none< на if (li.none< .
Программа Kotlin для проверки того, является ли число простым или нет
В этой статье вы научитесь проверять, является ли число простым или нет. Это делается с помощью цикла for-in в Kotlin.
Пример 1: Программа для проверки простого числа с использованием цикла for-in
fun main(args: Array) ( val num = 29 var flag = false for (i in 2… num / 2) ( // condition for nonprime number if (num % i == 0) ( flag = true break ) ) if (!flag) println("$num is a prime number.") else println("$num is not a prime number.") )
Когда вы запустите программу, вывод будет:
Как и в Java, в приведенной выше программе цикл for используется для определения, является ли данное число num простым или нет. Нам нужно всего лишь перебрать от 2 до половины числа num, потому что никакое число не делится более чем на свою половину.
Внутри цикла for мы проверяем, делится ли число на любое число в заданном диапазоне (2… num/2) . Если это так, установлен флаг, true и мы выходим из цикла. Это определяет, что num не является простым числом.
Если num не делится ни на какое число, флаг false, а num — простое число.
Вот эквивалентный код Java: Программа Java для проверки простого числа
Пример 2: Программа для проверки простого числа с использованием цикла while
fun main(args: Array) ( val num = 33 var i = 2 var flag = false while (i
Когда вы запустите программу, вывод будет:
В приведенной выше программе вместо цикла for используется цикл while. Цикл продолжается до тех пор, пока i
Посетите эту страницу, чтобы узнать, как вы можете отобразить все простые числа между двумя интервалами.
Получить список простых чисел, присутствующих в массиве
Сформировать список из простых чисел до 1000. Вывести созданный список в файл
Сформировать список из простых чисел до 1000. Вывести созданный список в файл. В начале.
Найти количество простых чисел в массиве из 10 положительных целых чисел
Задание: Описать функцию IsPrime(K) логического типа, возвращающую true, если целый параметр К.
В массиве целых чисел найти количество простых чисел между min и max элементами
В массиве целых чисел найти количество простых чисел в части массива, расположенной между.
В массиве целых чисел найти количество простых чисел
Требуется определить массив целых чисел , заполнить его случайными числами или ввести его элементы.
Сообщение было отмечено vlad22 как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
fun main(args: ArrayString>) { val a = intArrayOf(10, 23, 37, 40, 41) val l = mutableListOfInt>() for (i in a) { if (checkPrimeNumber(i)) l.add(i) } for (i in l) { print("$i ") } println() } fun checkPrimeNumber(num: Int): Boolean { for (i in 2..num / 2) { if (num % i == 0) { return false } } return true }