
fun Int.isPrimeNum(): Boolean {
for(i in 2 until this)
if(this % i == 0) return false
return true
}
예)
- 64의 약수는 1, 2, 4, 8, 16, 32, 64 이다.
즉, 64 = 1 * 64 = 2 * 32 = 4 * 16 = 8 * 8 이다.
즉, 2, 4, 8만을 대상으로 확인하면 소수인지 여부가 판별이 가능하다.
2, 4, 8은 모두 ⌊√64⌋ = 8 이하이다.- 90의 약수는 1, 2, 3, 5, 6, 9, 10, 15, 18, 30, 45, 90
즉, 90 = 1 * 90 = 2 * 45 = 3 * 30 = 5 * 18 = 6 * 15 = 9 * 10
즉, 2, 3, 5, 6, 9 만으로 대상으로 확인하면 소수인지 여부가 판별이 가능하다.
2, 3, 5, 6, 9는 모두 ⌊√90⌋ = 9 이하이다.
예) n = 97일 경우 95번(2 until 97)의 연산이 아닌 8번(2 .. 9)의 연산만 하면 된다.
fun Int.isPrimeNum(): Boolean {
val other = kotlin.math.sqrt(this.toDouble()).toInt()
for(i in 2..other)
if(this % i == 0) return false
return true
}
fun main() {
val input = readln().split(" ").map { it.toInt() }
for(i in input[0] .. input[1])
{
if(i.isPrimeNum()) println(i)
}
}
fun Int.isPrimeNum(): Boolean {
if(this < 2) return false
if(this == 2) return true
val other = kotlin.math.sqrt(this.toDouble()).toInt()
for(i in 2..other)
if(this % i == 0) return false
return true
}
1. 찾고자 하는 범위의 자연수를 나열한다.
2. 1은 지운다.
3. 2부터 시작하여, 2의 배수를 지워나간다.
4. 다음 소수의 배수를 모두 지운다.
[소수 (수론)]
fun main() {
val input = readln().split(" ").map { it.toInt() }
val isPrimeNumbers = BooleanArray(input[1] + 1) { true }
isPrimeNumbers[0] = false
isPrimeNumbers[1] = false
val limitNumber = kotlin.math.sqrt(input[1].toDouble()).toInt()
for(number in (2..limitNumber))
{
if(!isPrimeNumbers[number]) continue
val powerOfNumber = number * number
for (y in (powerOfNumber until isPrimeNumbers.size) step number) {
isPrimeNumbers[y] = false
}
}
for(i in (input[0]..input[1])) {
if(isPrimeNumbers[i]) println(i)
}
}