본문 바로가기
알고리즘

[Swift] 백준 2581번 소수

by 고고 2022. 3. 18.

링크: https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

 

[Swift] 소수 판별 알고리즘에서 에라토스테네스의 체를 사용하였습니다.

import Foundation

let M = Int(readLine()!)! // 최소
let N = Int(readLine()!)! // 최대

var array = Array(repeating: true, count: N + 1)

if Int(sqrt(Double(N))) > 1 {
    for i in 2...Int(sqrt(Double(N))) {
        if array[i] == true { // i가 소수인 경우 (남은 수인 경우)
            // i를 제외한 i의 모든 배수를 지우기
            var j = 2
            while i * j <= N {
                array[i * j] = false
                j += 1
            }
        }
    }
}

array[1] = false // 1은 소수가 아님.

var sum = 0
var m = Int.max

for i in M...N {
    if array[i] {
        sum += i
        m = min(m, i)
    }
}

if sum == 0 {
    print("-1")
} else {
    print(sum)
    print(m)
}

댓글