Successive prime differences: Difference between revisions

Line 447:
│ │ │997141 997147 997151 997153│
└─────┴─────┴───────────────────────────┘</lang>
 
=={{header|Java}}==
{{trans|Go}}
<lang java>import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class SuccessivePrimeDifferences {
private static Integer[] sieve(int limit) {
List<Integer> primes = new ArrayList<>();
primes.add(2);
boolean[] c = new boolean[limit + 1];// composite = true
// no need to process even numbers > 2
int p = 3;
while (true) {
int p2 = p * p;
if (p2 > limit) {
break;
}
for (int i = p2; i <= limit; i += 2 * p) {
c[i] = true;
}
do {
p += 2;
} while (c[p]);
}
for (int i = 3; i <= limit; i += 2) {
if (!c[i]) {
primes.add(i);
}
}
 
return primes.toArray(new Integer[0]);
}
 
private static List<List<Integer>> successivePrimes(Integer[] primes, Integer[] diffs) {
List<List<Integer>> results = new ArrayList<>();
int dl = diffs.length;
outer:
for (int i = 0; i < primes.length - dl; i++) {
Integer[] group = new Integer[dl + 1];
group[0] = primes[i];
for (int j = i; j < i + dl; ++j) {
if (primes[j + 1] - primes[j] != diffs[j - i]) {
continue outer;
}
group[j - i + 1] = primes[j + 1];
}
results.add(Arrays.asList(group));
}
return results;
}
 
public static void main(String[] args) {
Integer[] primes = sieve(999999);
Integer[][] diffsList = {{2}, {1}, {2, 2}, {2, 4}, {4, 2}, {6, 4, 2}};
System.out.println("For primes less than 1,000,000:-\n");
for (Integer[] diffs : diffsList) {
System.out.printf(" For differences of %s ->\n", Arrays.toString(diffs));
List<List<Integer>> sp = successivePrimes(primes, diffs);
if (sp.isEmpty()) {
System.out.println(" No groups found");
continue;
}
System.out.printf(" First group = %s\n", Arrays.toString(sp.get(0).toArray(new Integer[0])));
System.out.printf(" Last group = %s\n", Arrays.toString(sp.get(sp.size() - 1).toArray(new Integer[0])));
System.out.printf(" Number found = %d\n", sp.size());
System.out.println();
}
}
}</lang>
{{out}}
<pre>For primes less than 1,000,000:-
 
For differences of [2] ->
First group = [3, 5]
Last group = [999959, 999961]
Number found = 8169
 
For differences of [1] ->
First group = [2, 3]
Last group = [2, 3]
Number found = 1
 
For differences of [2, 2] ->
First group = [3, 5, 7]
Last group = [3, 5, 7]
Number found = 1
 
For differences of [2, 4] ->
First group = [5, 7, 11]
Last group = [999431, 999433, 999437]
Number found = 1393
 
For differences of [4, 2] ->
First group = [7, 11, 13]
Last group = [997807, 997811, 997813]
Number found = 1444
 
For differences of [6, 4, 2] ->
First group = [31, 37, 41, 43]
Last group = [997141, 997147, 997151, 997153]
Number found = 306</pre>
 
=={{header|Julia}}==
1,452

edits