Strange unique prime triplets: Difference between revisions
Content added Content deleted
(Added C++ solution) |
(Added Swift solution, minor edit to C++ code) |
||
Line 117: | Line 117: | ||
std::vector<bool> prime_sieve(size_t limit) { |
std::vector<bool> prime_sieve(size_t limit) { |
||
std::vector<bool> sieve(limit, true); |
std::vector<bool> sieve(limit, true); |
||
if (limit > 0) |
|||
sieve[1] = false; |
|||
for (size_t i = 0; i < limit; i += 2) |
for (size_t i = 0; i < limit; i += 2) |
||
sieve[i] = false; |
sieve[i] = false; |
||
for (size_t p = 3; |
for (size_t p = 3; ; p += 2) { |
||
size_t q = p * p; |
|||
if (q >= limit) |
|||
break; |
|||
if (sieve[p]) { |
if (sieve[p]) { |
||
size_t inc = 2 * p; |
size_t inc = 2 * p; |
||
for ( |
for (; q < limit; q += inc) |
||
sieve[q] = false; |
sieve[q] = false; |
||
} |
} |
||
Line 1,233: | Line 1,237: | ||
done... |
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> |
</pre> |
||