The series of increasing prime numbers begins: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...

The task applies a filter to the series returning groups of successive primes, (s'primes), that differ from the next by a given value or values.

Example 1: Specifying that the difference between s'primes be 2 leads to the groups:

(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), ...

(Known as Twin primes or Prime pairs)

Example 2: Specifying more than one difference between s'primes leads to groups of size one greater than the number of differences. Differences of 2, 4 leads to the groups:

(5, 7, 11), (11, 13, 17), (17, 19, 23), (41, 43, 47), .... 

In the first group 7 is two more than 5 and 11 is four more than 7; as well as 5, 7, and 11 being successive primes.
Differences are checked in the order of the values given, (differences of 4, 2 would give different groups entirely).

Task

 In each case use a list of primes less than 1_000_000
 For the following Differences show the first and last group, as well as the number of groups found:
 Differences of 2.
 Differences of 1.
 Differences of 2, 2.
 Differences of 2, 4.
 Differences of 4, 2.
 Differences of 6, 4, 2.
 Show output here.

Note: Generation of a list of primes is a secondary aspect of the task. Use of a built in function, well known library, or importing/use of prime generators from other Rosetta Code tasks is encouraged.

references
https://pdfs.semanticscholar.org/78a1/7349819304863ae061df88dbcb26b4908f03.pdf
https://www.primepuzzles.net/puzzles/puzz_011.htm
https://matheplanet.de/matheplanet/nuke/html/viewtopic.php?topic=232720&start=0
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)