- 2부터 N까지의 모든 자연수를 나열한다.
- 남은 수 중에서 아직 처리하지 않은 가장 작은 수 i를 찾는다.
- 남은 수 중에서 i의 배수를 모두 제거한다.(i는 제거하지 않는다.)
- 더 이상 반복할 수 없을 때까지 2번과 3번의 과정을 반복한다.
import Foundation
let n = 1000
// 처음에는 모든 수가 소수(true)인 것으로 초기화 (0과 1은 제외)
var array = [Bool](repeating: true, count: n + 1)
// 에라토스테네스의 체 알고리즘
for i in 2..<Int(sqrt(Double(n))) + 1 { // 2부터 n의 제곱근까지의 모든 수를 확인하며
if array[i] == true { // i가 소수인 경우
// i를 제외한 i의 모든 배수 지우기
var j = 2
while i * j <= n {
array[i * j] = false
j += 1
}
}
}
// 모든 요소 출력
for i in 2...n {
if array[i] == true {
print(i, terminator: " ")
}
}
n | result |
---|---|
10 | 4 |
5 | 3 |
import Foundation
func solution(_ num: Int) -> Int {
var count = 0
var array = [Bool](repeating: true, count: num + 1)
// 에라토스테네스의 체
for i in 2..<Int(sqrt(Double(num))) + 1 {
if array[i] == true {
var j = 2
while (i * j) <= num {
array[i * j] = false
j += 1
}
}
}
for i in 2...num {
if array[i] == true {
count += 1
}
}
return count
}
import Foundation
var count = 0
//let numCount = Int(readLine()!)!
//let numArray = readLine()!.components(separatedBy: " ").map { Int($0)! }
let numCount = 4
let numArray = [1,3,5,7]
let numArrayMaxValue = numArray.max()!
var checkCount = [Bool](repeating: true, count: numArrayMaxValue + 1)
for i in 2..<Int(sqrt(Double(numArrayMaxValue))) + 1 {
if checkCount[i] == true {
var j = 2
while(i * j) <= numArrayMaxValue {
checkCount[i * j] = false
j += 1
}
}
}
checkCount[0] = false
checkCount[1] = false
for num in numArray {
if checkCount[num] == true {
count += 1
}
}
print(count)
제가 학습한 내용을 요약하여 정리한 것입니다. 내용에 오류가 있을 수 있으며, 어떠한 피드백도 감사히 받겠습니다.
감사합니다.