Strange unique prime triplets: Difference between revisions
Content added Content deleted
m (→{{header|C#|CSharp}}: added note about sieve time) |
(Added Java solution) |
||
Line 903: | Line 903: | ||
{{out}} |
{{out}} |
||
Same as 'basic' version. |
Same as 'basic' version. |
||
=={{header|Java}}== |
|||
<lang java>import java.util.*; |
|||
public class StrangeUniquePrimeTriplets { |
|||
public static void main(String[] args) { |
|||
strangeUniquePrimeTriplets(30, true); |
|||
strangeUniquePrimeTriplets(1000, false); |
|||
} |
|||
private static void strangeUniquePrimeTriplets(int limit, boolean verbose) { |
|||
boolean[] sieve = primeSieve(limit * 3); |
|||
List<Integer> primeList = new ArrayList<>(); |
|||
for (int p = 3; p < limit; p += 2) { |
|||
if (sieve[p]) |
|||
primeList.add(p); |
|||
} |
|||
int n = primeList.size(); |
|||
// Convert object list to primitive array for performance |
|||
int[] primes = new int[n]; |
|||
for (int i = 0; i < n; ++i) |
|||
primes[i] = primeList.get(i); |
|||
int count = 0; |
|||
if (verbose) |
|||
printf("Strange unique prime triplets < %d:", limit); |
|||
for (int i = 0; i + 2 < n; ++i) { |
|||
for (int j = i + 1; j + 1 < n; ++j) { |
|||
int s = primes[i] + primes[j]; |
|||
for (int k = j + 1; k < n; ++k) { |
|||
int sum = s + primes[k]; |
|||
if (sieve[sum]) { |
|||
++count; |
|||
if (verbose) |
|||
printf("%2d + %2d + %2d = %2d", primes[i], primes[j], primes[k], sum); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
printf("\nCount of strange unique prime triplets < %d is %d.", limit, count); |
|||
} |
|||
private static boolean[] primeSieve(int limit) { |
|||
boolean[] sieve = new boolean[limit]; |
|||
Arrays.fill(sieve, true); |
|||
if (limit > 0) |
|||
sieve[0] = false; |
|||
if (limit > 1) |
|||
sieve[1] = false; |
|||
for (int i = 4; i < limit; i += 2) |
|||
sieve[i] = false; |
|||
for (int p = 3; ; p += 2) { |
|||
int q = p * p; |
|||
if (q >= limit) |
|||
break; |
|||
if (sieve[p]) { |
|||
int inc = 2 * p; |
|||
for (; q < limit; q += inc) |
|||
sieve[q] = false; |
|||
} |
|||
} |
|||
return sieve; |
|||
} |
|||
private static void printf(String format, Object... args) { |
|||
System.out.println(String.format(format, args)); |
|||
} |
|||
}</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> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |