このソリューションは、Wikipediaで説明されているアルゴリズムを変更せずに完全に繰り返します。
import Foundation // extension Int { func powerOf2() -> Int { return self * self } } // ? let max = 8_500_000 // var testValue = 2 let startTime = Date() // var data = (2...max).map{$0} let allocationTime = Date() // while (testValue.powerOf2() <= max) { data.removeAll(where: {$0 >= testValue.powerOf2() && $0.isMultiple(of: testValue)}) testValue = data.first(where: {$0 > testValue})! } let overallTime = Date() // print(" \(data.count) : ", data) print() print(" : \(String(format: "%.2f",(allocationTime.timeIntervalSince(startTime)))) . ") print(": \(String(format: "%.2f",(overallTime.timeIntervalSince(allocationTime)))) . ") print(": \(String(format: "%.2f",(overallTime.timeIntervalSince(startTime)))) . ")
興味のある方は、このサンドボックスでこれをいじることができます。 そこに絞ることができた最大値-8 500 000の領域で、検索は約6秒間実行されます。 残念ながら、このコードをMac Mini Late 2014(Core i5、8 GB)のプレイグラウンドで実行すると、既にパラメーターmax = 1,000,000が設定されているため、大きなブレーキがかかりますので注意してください。 上記のリンクでは、すべてがはるかに高速に回転します。