Successive prime differences: Difference between revisions

(Added Algol 68)
Line 1,442:
Last group = [997141, 997147, 997151, 997153]
Number found = 306</pre>
 
=={{header|Nim}}==
<lang Nim>import math, strutils
 
const N = 1_000_000
 
var comp: array[2..(N - 1), bool] # True is composite, so default is prime.
for n in 2..<N:
if not comp[n]:
for k in countup(n * n, N - 1, n):
comp[k] = true
 
var primes = @[2]
for n in countup(3, N - 1, 2):
if not comp[n]:
primes.add n
 
iterator groups(primes: seq[int]; diffs: varargs[int]): seq[int] =
## Yield groups of successive primes with given differences.
var cumdiffs = cumsummed(diffs) # Compute differences from first prime of group.
let groupSize = diffs.len + 1
for i in 0..(primes.len - groupSize):
let p = primes[i]
var group = @[p]
for k, diff in cumdiffs:
if primes[i + k + 1] != p + diff: break
group.add p + diff
if group.len == groupSize:
yield group
 
proc findGroups(primes: seq[int]; diffs: varargs[int]) =
## In the given list of primes and for the given differences,
## find the first group, the last group and the count of groups.
var
first, last: seq[int]
count = 0
for group in primes.groups(diffs):
if first.len == 0: first = group
last = group
inc count
echo "Differences: ", diffs.join(", ")
echo "– first: ($#)" % first.join(", ")
echo "– last: ($#)" % last.join(", ")
echo "– count: ", count
echo()
 
primes.findGroups(2)
primes.findGroups(1)
primes.findGroups(2, 2)
primes.findGroups(2, 4)
primes.findGroups(4, 2)
primes.findGroups(6, 4, 2)</lang>
 
{{out}}
<pre>Differences: 2
– first: (3, 5)
– last: (999959, 999961)
– count: 8169
 
Differences: 1
– first: (2, 3)
– last: (2, 3)
– count: 1
 
Differences: 2, 2
– first: (3, 5, 7)
– last: (3, 5, 7)
– count: 1
 
Differences: 2, 4
– first: (5, 7, 11)
– last: (999431, 999433, 999437)
– count: 1393
 
Differences: 4, 2
– first: (7, 11, 13)
– last: (997807, 997811, 997813)
– count: 1444
 
Differences: 6, 4, 2
– first: (31, 37, 41, 43)
– last: (997141, 997147, 997151, 997153)
– count: 306</pre>
 
=={{header|Perl}}==
Anonymous user