Swift: Tamis d'Ératosthène

Ce sera une toute petite publication qui m'a inspiré cet article. Non, je ne vais pas concurrencer la solution qui y est proposée (sauf en termes de brièveté), mais peut-être, comme démonstration des capacités de Swift, elle sera intéressante pour la habrasociety.

La solution répète absolument l'algorithme décrit dans Wikipedia , sans aucune modification.

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

Les personnes intéressées peuvent jouer avec cela dans ce bac à sable. Le maximum que j'ai réussi à y presser - aux alentours de 8 500 000, la recherche prend environ 6 secondes. Malheureusement, l'exécution de ce code dans la cour de récréation sur mon Mac Mini fin 2014 (Core i5, 8 Go) déjà avec le paramètre max = 1 000 000 conduit à des freins sauvages, alors soyez prudent. Sur le lien ci-dessus, tout tourne beaucoup plus vite.

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


All Articles