また1からこつこつと

最高はひとつじゃないと信じてまたがんばります。

エラトステネスのふるいを使って素数を生成してみる

試験勉強の息抜きに素数生成プログラムをSwiftで書いてみた。何番煎じだよって感じですが…

func primeMake(primeRange:Int)->[Int]{
    
    //素数の生成範囲を指定
    let loop:Int = primeRange
    
    var num:[Int] = []
    var prime:[Int] = []
    
    //探索用配列に指定した範囲までの整数を追加
    for var i=2; i<loop+1; i++ {
        num.append(i)
    }
    
    //生成範囲の2乗まで繰り返す
    for var i=1; i < Int(sqrtf(Float(loop))); i++ {
        
        //探索用配列の先頭を素数配列に追加
        prime.append(num[0])
        num.removeAtIndex(0)
        
        //素数配列の最後の要素で割り切れる数を探索用配列から削除
        for var j=0; j<num.count; j++ {
            if num[j] % prime[prime.count-1] == 0{
                num.removeAtIndex(j)
            }
        }
    }
    
    let count = num.count
    
    //探索用配列に残っている数を素数配列に追加
    for var k=0; k<count; k++ {
        prime.append(num[0])
        num.removeFirst()
    }
    
    return prime

}

print(primeMake(100))

primeMake()の引数に生成したい素数の範囲を指定してあげればIntの配列で返してくれます