백준 1929번: 소수 구하기(Swift)

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

에라토스테네스의 체를 사용하여 시간내에 풀 수 있다. 2부터 모든 소수를 구하는 이유는 100부터 시작할 경우 100은 지워지지 않기 때문에 2부터 범위까지의 모든 소수를 구한 수 시작수이상의 수 부터 출력을 하면 된다.

import Foundation

let input = readLine()!.split(separator: " ").map { Int($0)! }
let m = input[0]
let n = input[1]
var numList = [Int]()
var boolList = Array(repeating: false, count: n + 1)
for i in 2...n {
    if !boolList[i] {
        numList.append(i)
        for j in stride(from: i * 2, through: n, by: i) {
            boolList[j] = true
        }
    }
}
for prime in numList {
    if prime < m { continue }
    print(prime)
}