سويفت: غربال إراتوستينس

سيكون هذا منشورًا صغيرًا جدًا ، وقد استلهمت من هذا المقال. لا ، أنا لن أتنافس مع الحل المقترح هناك (إلا بإيجاز) ، لكن ربما ، كدليل على قدرات سويفت ، سيكون من المثير للإعجاب.

يكرر الحل تمامًا الخوارزمية الموضحة في ويكيبيديا ، دون أي تعديلات.

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 جيجابايت) مع حد أقصى = 1،000،000 معلمة يؤدي إلى الفرامل البرية ، لذا كن حذرًا. على الرابط أعلاه ، كل شيء يدور بشكل أسرع.

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


All Articles