πŸ“– Algorithm/πŸ“ λ°±μ€€

Kotlin 🍬 λ°±μ€€ 15단계 :: 4134 번

λ²ŒκΏ€μ˜€μ†Œλ¦¬πŸ¦‘ 2024. 3. 12. 15:08
λ°˜μ‘ν˜•

 

λ‹€μŒ μ†Œμˆ˜

문제   |

  μ •μˆ˜ n(0 ≤ n ≤ 4*$10^{9}$)κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, n보닀 ν¬κ±°λ‚˜ 같은 μ†Œμˆ˜ 쀑 κ°€μž₯ μž‘μ€ μ†Œμˆ˜ μ°ΎλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯   |

  첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ κ°œμˆ˜κ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고, μ •μˆ˜ n이 주어진닀.

 

좜λ ₯   |

  각각의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ n보닀 ν¬κ±°λ‚˜ 같은 μ†Œμˆ˜ 쀑 κ°€μž₯ μž‘μ€ μ†Œμˆ˜λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

 

풀이  |

  μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄ μ†Œμˆ˜ λ„μΆœ (μ™Έμ›Œλ‘κΈ°) 6k ± 1 κ·œμΉ™μ„ 이용

 

 

λ‹΅μ•ˆ  |

fun main() {
    val count = readLine()!!.toInt()
    repeat(count) {
        val num = readLine()!!.toLong()
        val prime = nextNum(num)
        println(prime)
    }
}

fun nextNum(n: Long): Long {
    var num = n
    if (num <= 1) num = 2
    while (!isPrime(num)) {
        num++
    }
    return num
}

fun isPrime(num: Long): Boolean {
    if (num <= 1) return false
    if (num <= 3) return true
    if (num % 2 == 0L || num % 3 == 0L) return false

    var i = 5L
    while (i * i <= num) {
        if (num % i == 0L || num % (i + 2) == 0L) {
            return false
        }
        i += 6
    }
    return true
}
λ°˜μ‘ν˜•