Skip to content

Commit fbba3db

Browse files
committed
Add Atkins’ sieve
Rename files Add project
1 parent 216ce99 commit fbba3db

File tree

15 files changed

+1063
-4
lines changed

15 files changed

+1063
-4
lines changed

Prime Numbers/Atkins_Sieve.swift

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
infix operator ^^ { associativity left precedence 160 }
2+
func ^^ (radix: Int, power: Int) -> Int {
3+
return Int(pow(CGFloat(radix), CGFloat(power)))
4+
}
5+
6+
infix operator .. {associativity left precedence 60 }
7+
8+
func ..<T: Strideable>(left: T, right: T.Stride) -> (T, T.Stride) {
9+
return (left, right)
10+
}
11+
12+
func ..<T: Strideable>(left: (T, T.Stride), right: T) -> [T] {
13+
return [T](left.0.stride(through: right, by: left.1))
14+
}
15+
16+
17+
func primesTo(max: Int) -> [Int] {
18+
var is_prime = [Bool](count: max + 1, repeatedValue: false)
19+
is_prime[2] = true
20+
is_prime[3] = true
21+
let limit = Int(ceil(sqrt(Double(max))))
22+
for x in 1...limit {
23+
for y in 1...limit {
24+
var num = 4 * x * x + y * y
25+
if (num <= max && (num % 12 == 1 || num % 12 == 5)) {
26+
is_prime[num] = true
27+
}
28+
num = 3 * x * x + y * y
29+
if (num <= max && num % 12 == 7) {
30+
is_prime[num] = true
31+
}
32+
if (x > y) {
33+
num = 3 * x * x - y * y
34+
if (num <= max && num % 12 == 11) {
35+
is_prime[num] = true
36+
}
37+
}
38+
}
39+
}
40+
if limit > 5 {
41+
for i in 5...limit {
42+
if is_prime[i] {
43+
for j in (i * i)..i..max {
44+
is_prime[j] = false
45+
}
46+
}
47+
}
48+
}
49+
var primesArray = [Int]()
50+
for (idx, val) in is_prime.enumerate() {
51+
if val == true { primesArray.append(idx) }
52+
}
53+
return primesArray
54+
}

0 commit comments

Comments
 (0)