Ваш "алгоритм" неверен. Вы должны хранить где-нибудь свои простые числа, а затем просто проверить, удовлетворяет ли n
условию n % prime != 0
для каждого простого числа. Если это так, просто добавьте это n
к массиву простых чисел и переходите к следующему n
.
Начиная с Swift 4.2, вы можете использовать этот очень простой алгоритм, используя allSatisfy
var primes = [Int]()
for n in 2...100 {
if primes.allSatisfy({ n % $0 != 0 }) {
primes.append(n)
}
}
print(primes) // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Или вы можете реализовать более эффективный алгоритм Сито Эратосфена .
Ниже моя простая реализация (есть более эффективные решения)
var range = [Int](2...100)
var p = 0
while true {
guard let newPrimeIndex = range.firstIndex(where: { $0 > p }) else { break }
p = range[newPrimeIndex]
range.removeAll(where: { $0 % p == 0 && $0 != p })
}
print(range) // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]