Swift: Sieb von Eratosthenes

Dies wird eine sehr kleine Veröffentlichung sein, die mich von diesem Artikel inspiriert hat . Nein, ich werde nicht mit der dort vorgeschlagenen Lösung konkurrieren (außer in Kürze), aber vielleicht wird es als Demonstration von Swifts Fähigkeiten für die Habrasociety interessant sein.

Die Lösung wiederholt den in Wikipedia beschriebenen Algorithmus ohne Änderungen.

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)))) . ") 

Interessenten können in diesem Sandkasten damit herumspielen. Das Maximum, das ich dort drücken konnte - in der Region von 8.500.000 dauert die Suche ungefähr 6 Sekunden. Leider führt das Ausführen dieses Codes auf dem Spielplatz auf meinem Mac Mini Ende 2014 (Core i5, 8 GB) bereits mit dem Parameter max = 1.000.000 zu wilden Bremsen. Seien Sie also vorsichtig. Über den obigen Link dreht sich alles viel schneller.

Source: https://habr.com/ru/post/de450888/


All Articles