Strange unique prime triplets: Difference between revisions

Added Swift solution, minor edit to C++ code
(Added C++ solution)
(Added Swift solution, minor edit to C++ code)
Line 117:
std::vector<bool> prime_sieve(size_t limit) {
std::vector<bool> sieve(limit, true);
sieve[1]if =(limit false;> 0)
sieve[1] = false;
for (size_t i = 0; i < limit; i += 2)
sieve[i] = false;
for (size_t p = 3; p * p < limit; p += 2) {
size_t q = p * p;
if (q >= limit)
break;
if (sieve[p]) {
size_t inc = 2 * p;
for (size_t q = p * p; q < limit; q += inc)
sieve[q] = false;
}
Line 1,233 ⟶ 1,237:
done...
 
</pre>
 
=={{header|Swift}}==
<lang swift>import Foundation
 
func primeSieve(limit: Int) -> [Bool] {
guard limit > 0 else {
return []
}
var sieve = Array(repeating: true, count: limit)
sieve[1] = false
for i in stride(from: 0, to: limit, by: 2) {
sieve[i] = false
}
var p = 3
while true {
var q = p * p
if q >= limit {
break
}
if sieve[p] {
let inc = 2 * p
while q < limit {
sieve[q] = false
q += inc
}
}
p += 2
}
return sieve
}
 
func strangeUniquePrimeTriplets(limit: Int, verbose: Bool) {
let sieve = primeSieve(limit: 3 * limit)
var primes: [Int] = []
for p in stride(from: 3, to: limit, by: 2) {
if sieve[p] {
primes.append(p)
}
}
let n = primes.count
var count = 0
if verbose {
print("Strange unique prime triplets < \(limit):")
}
for i in (0..<n - 2) {
for j in (i + 1..<n - 1) {
for k in (j + 1..<n) {
let sum = primes[i] + primes[j] + primes[k]
if sieve[sum] {
count += 1
if verbose {
print(String(format: "%2d + %2d + %2d = %2d",
primes[i], primes[j], primes[k], sum))
}
}
}
}
}
print("\nCount of strange unique prime triplets < \(limit) is \(count).")
}
 
strangeUniquePrimeTriplets(limit: 30, verbose: true)
strangeUniquePrimeTriplets(limit: 1000, verbose: false)</lang>
 
{{out}}
<pre>
Strange unique prime triplets < 30:
3 + 5 + 11 = 19
3 + 5 + 23 = 31
3 + 5 + 29 = 37
3 + 7 + 13 = 23
3 + 7 + 19 = 29
3 + 11 + 17 = 31
3 + 11 + 23 = 37
3 + 11 + 29 = 43
3 + 17 + 23 = 43
5 + 7 + 11 = 23
5 + 7 + 17 = 29
5 + 7 + 19 = 31
5 + 7 + 29 = 41
5 + 11 + 13 = 29
5 + 13 + 19 = 37
5 + 13 + 23 = 41
5 + 13 + 29 = 47
5 + 17 + 19 = 41
5 + 19 + 23 = 47
5 + 19 + 29 = 53
7 + 11 + 13 = 31
7 + 11 + 19 = 37
7 + 11 + 23 = 41
7 + 11 + 29 = 47
7 + 13 + 17 = 37
7 + 13 + 23 = 43
7 + 17 + 19 = 43
7 + 17 + 23 = 47
7 + 17 + 29 = 53
7 + 23 + 29 = 59
11 + 13 + 17 = 41
11 + 13 + 19 = 43
11 + 13 + 23 = 47
11 + 13 + 29 = 53
11 + 17 + 19 = 47
11 + 19 + 23 = 53
11 + 19 + 29 = 59
13 + 17 + 23 = 53
13 + 17 + 29 = 59
13 + 19 + 29 = 61
17 + 19 + 23 = 59
19 + 23 + 29 = 71
 
Count of strange unique prime triplets < 30 is 42.
 
Count of strange unique prime triplets < 1000 is 241580.
</pre>
 
1,777

edits