Swift: Saringan Eratosthenes

Ini akan menjadi publikasi yang sangat kecil, yang saya terinspirasi oleh artikel ini. Tidak, saya tidak akan bersaing dengan solusi yang diusulkan di sana (kecuali dalam waktu singkat), tapi mungkin, sebagai demonstrasi kemampuan Swift, itu akan menarik bagi masyarakat sekitar.

Solusinya benar-benar mengulangi algoritma yang dijelaskan dalam Wikipedia , tanpa modifikasi apa pun.

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

Mereka yang tertarik dapat bermain-main dengan ini di kotak pasir ini. Maksimum yang berhasil saya peras di sana - di wilayah 8.500.000, pencarian membutuhkan waktu sekitar 6 detik. Sayangnya, menjalankan kode ini di taman bermain di Mac Mini Akhir 2014 (Core i5, 8 GB) sudah dengan maks = 1.000.000 parameter mengarah ke rem liar, jadi hati-hati. Pada tautan di atas, semuanya berputar lebih cepat.

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


All Articles