import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
let (M, N) = (input[0], input[1])
var array = Array(0...N)
var answer = ""
(array[0], array[1]) = (0, 0)
for i in stride(from: 2, through: Int(Double(N).squareRoot()), by: 1) {
let now = array[i]
if now == 0 {
continue
}
for j in stride(from: i+i, to: array.count, by: i) {
array[j] = 0
}
}
for i in M...N {
if array[i] != 0 {
answer += "\(array[i])\n"
}
}
print(answer)
소수 구하는 문제는 원래 몇 번 풀어봤지만 이 문제는 유독 잔실수가 많았다. 특히 Range에 관한 오류가 엄청 많았다…
var array = [0, 0] + Array(2...N)
이라고 선언했었는데, N이 1인 경우에는 범위를 올바르게 계산할 수가 없다. for i in 2...Int(Double(N).squareRoot())
라고 코드를 짰는데, 여기서도 N의 제곱근이 2보다 작은 경우에는 범위를 계산할 수 없어 에러가 발생한다.→ 입력값의 범위를 꼭꼭!! 잘 확인하고 필요한 경우에는 stride
메소드를 사용하는 방법도 생각해보자.
for j in i+1..<array.count
라고 썼다가 시간초과가 되었다..ㅎㅎ 제발 꼼꼼하게 좀 풀자!!