[Algorithm] μμμ κ΄λ ¨λ μκ³ λ¦¬μ¦(feat. μλΌν μ€ ν λ€μ€μ 체)
μλ νμΈμ Foma π» μ λλ€!
μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νλ€ λ³΄λ©΄ μμλ₯Ό μ°Ύμν νλ μ νμ΄ λ§μλ°μ.
μμμ κ°―μλ₯Ό μ°ΎμμΌ ν λ, μμμΈμ§ μλμ§ λΆλ³ν΄μΌ ν λ λ± ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ΄ νμν©λλ€.
μ€λμ μ νν μκ³ λΉ λ₯΄κ² μ°ΎκΈ° μν΄μ κΈμ μ 리ν΄λ³΄λ €κ³ ν©λλ€.
λ°λ‘ μμν κ²μ~!
κΈ°μ‘΄μ μμλ₯Ό μ°Ύλ λ°©λ²
κΈ°μ‘΄μ μμλ₯Ό μ°Ύλ λ°©λ²μ kλΌλ μκ° μλ€λ©΄ λ¨μνκ² 2λΆν° nκΉμ§ kλ‘ λλ μ λλμ΄ λ¨μ΄μ§λ μ«μμ κ°―μλ₯Ό νλ³νλ©΄ λκ² μ£ ?
νμ§λ§ μ΄λ° λ°©λ²μ μ«μκ° μ»€μ§λ©΄ 컀μ§μλ‘ λΉν¨μ¨μ μ΄κΈ° λλ¬Έμ μκ°μ΄ μ€λ κ±Έλ¦¬κ² λ©λλ€.
κ·Έλ¬λ―λ‘ ν¨μ¨μ μΈ λ°©λ²μ μ¬μ©ν΄μΌ νλλ°μ.
μλΌν μ€ ν λ€μ€μ 체
λ¨Όμ 2λΆν° nκΉμ§μ ꡬκ°μμ μμμ κ°―μλ, μ΄λ€ μμκ° μλμ§ νμΈνκΈ° μν΄μ "μλΌν μ€ ν λ€μ€μ 체"λ₯Ό μκ³ λ¦¬μ¦μ μ°λ©΄ λ©λλ€.
μ°Ύλ λ°©μμ μλμ κ°μ΅λλ€.
1. 2λΆν° nκΉμ§ λͺ¨λ μλ₯Ό λμ΄νλ€.
2. λ§μ½ μμλ₯Ό λ°κ²¬νλ€λ©΄ μμλ₯Ό λ°λ‘ μ νκ³ μμμ λ°°μλ₯Ό λͺ¨λ μ§μ΄λ€.
3. μ κ³Όμ μ λ°λ³΅νλ©΄ ꡬκ°μ λͺ¨λ μμκ° λ¨λλ€.
μλ κ·Έλ¦Όμ 보면 μ΄ν΄νκΈ° ν¨μ¬ νΈνμ€ κ±°μμ!
μ½λ ꡬν
func countPrimeNumber(_ n: Int) -> Int {
var count = 0
var array = Array.init(repeating: false, count: n+1)
for i in 2...n {
if array[i] == false {
count += 1
for j in stride(from: i, through: n, by: i) {
array[j] = true
}
}
}
return count
}
μμλΆλ³λ²
κ·Έ λ€μμΌλ‘ μμμΈμ§ μλμ§ λΉ λ₯΄κ² νμΈν΄μΌ ν λκΉ μμ΅λλ€.
μ΄λ¬ν κ²½μ°μλ "μ κ³±κ·Ό"μ μ΄μ©νλ©΄ λλλ°μ.
nμ μ½μλ 무쑰건 nμ μ κ³±κ·Ό μμ μ‘΄μ¬νκΈ° λλ¬Έμ 2λΆν° sqrt(n)μ λ²μμμ μκΈ° μμ μΌλ‘ λλμ΄ λ¨μ΄μ§λμ§ μλμ§λ₯Ό νμΈνλ©΄ λ©λλ€.
μ£Όμν μ μ μ κ³±κ·Όμ΄ 2λ³΄λ€ ν¬λ€λ©΄ μ κ³±κ·Όμ μ΄μ©νκ³ μλλΌλ©΄ 2λΆν° nκΉμ§ νμν΄μΌ ν©λλ€.
μ½λ ꡬν
func isPrimeNumber(_ n:Int) -> Bool {
let sqrt = Int(sqrt(Double(n))) >= 2 ? Int(sqrt(Double(n))) : n
for i in 2..<sqrt {
if n%i == 0 {
return false
}
}
return true
}