티스토리 뷰

SMALL

오늘의 문제

 

1929번: 소수 구하기

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

www.acmicpc.net

 

내 풀이

import Foundation

let input = readLine()!.split(separator: " ").map { Int($0)! }
var M = input[0]
var N = input[1]
var arr: [Bool] = Array(repeating: true, count: N+1)
arr[0] = false
if N >= 1 { arr[1] = false }

// 1 1 일 때는 그냥 강제로 0 출력해버림
if M == 1 && N == 1 {
    print(0)
    exit(0)
}

if N > 2 {
    // 에라토스테네스의 체를 사용
    for i in 2..<Int(sqrt(Double(N))+1) {
        if arr[i] {
            for j in stride(from: i*i, to: N+1, by: i) {
                arr[j] = false
            }
        }
    }
}

for i in M...N {
    if arr[i] {
        print(i)
    }
}

 

 

LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함