[알고리즘] 소수 판별

로빈·2022년 5월 27일
0

Algorithm, Data Structure

목록 보기
3/12

에라토스테네스의 체

func isPrime(_ number: Int) -> Bool {
    //모두 소수로 보고 true로 초기화, 인덱스랑 넘버랑 맞춰주기 위해서 count는 number + 1
    var sieve = Array.init(repeating: true, count: number + 1)
    let squareRootOfNumber = Int(sqrt(Double(number)))
    
    if number < 2 {
        return false
    }
  
    // 넘버의 최대 약수가 squareRootOfNumber 이하이므로 squareRootOfNumber까지 검사
    for i in 2...squareRootOfNumber + 1 {
        // 소수인지 판별
        if sieve[i] {
            // 소수의 배수는 false
            for j in stride(from: i + i, through: number, by: i) {
                sieve[j] = false
            }
        }
    }
    print((2...number).filter { sieve[$0] })
    return sieve[number]
}

출처

https://ko.wikipedia.org/wiki/에라토스테네스의_체

profile
IOS 앱개발 공부중

0개의 댓글