スイフト:エラトステネスのふるい

これは非常に小さな出版物であり、 この記事に触発されました。 いいえ、私はそこで提案された解決策と競合するつもりはありません(簡潔さを除きます)が、Swiftの機能のデモンストレーションとして、おそらくhabrasocietyにとって興味深いでしょう。



このソリューションは、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が設定されているため、大きなブレーキがかかりますので注意してください。 上記のリンクでは、すべてがはるかに高速に回転します。



All Articles