Swift: Tamiz de Eratóstenes

Esta será una publicación muy pequeña, que me inspiró este artículo. No, no voy a competir con la solución propuesta allí (excepto en brevedad), pero tal vez, como demostración de las capacidades de Swift, será interesante para la sociedad habra.

La solución repite absolutamente el algoritmo descrito en Wikipedia , sin modificaciones.

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

Los interesados ​​pueden jugar con esto en este sandbox. El máximo que logré exprimir allí: en la región de 8,500,000, la búsqueda toma aproximadamente 6 segundos. Desafortunadamente, ejecutar este código en el patio de juegos en mi Mac Mini Late 2014 (Core i5, 8 GB) con el parámetro max = 1,000,000 conduce a frenos salvajes, así que tenga cuidado. En el enlace de arriba, todo gira mucho más rápido.

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


All Articles