Ludic numbers   are related to prime numbers as they are generated by a sieve quite like the Sieve of Eratosthenes is used to generate prime numbers.

The first ludic number is   1.

To generate succeeding ludic numbers create an array of increasing integers starting from   2.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
(Loop)

 Take the first member of the resultant array as the next ludic number   2.
 Remove every   2nd   indexed item from the array (including the first).
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
 (Unrolling a few loops...)
 Take the first member of the resultant array as the next ludic number   3.
 Remove every   3rd   indexed item from the array (including the first).
3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 ...
 Take the first member of the resultant array as the next ludic number   5.
 Remove every   5th   indexed item from the array (including the first).
5 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 ...
 Take the first member of the resultant array as the next ludic number   7.
 Remove every   7th   indexed item from the array (including the first).
7 11 13 17 23 25 29 31 37 41 43 47 53 55 59 61 67 71 73 77 83 85 89 91 97 ...
  ... 
 Take the first member of the current array as the next ludic number   L.
 Remove every   Lth   indexed item from the array (including the first).
  ... 


Task

 Generate and show here the first 25 ludic numbers.
 How many ludic numbers are there less than or equal to 1000?
 Show the 2000..2005th ludic numbers.


Stretch goal

Show all triplets of ludic numbers < 250.

 A triplet is any three numbers     



x
,


{\displaystyle x,}

   



x
+
2
,


{\displaystyle x+2,}

   



x
+
6


{\displaystyle x+6}

      where all three numbers are also ludic numbers. 


' FB 1.05.0 Win64
 
' As it would be too expensive to actually remove elements from the array
' we instead set an element to 0 if it has been removed.
 
Sub ludic(n As Integer, lu() As Integer)
  If n < 1 Then Return
  Redim lu(1 To n)
  lu(1) = 1
  If n = 1 Then Return
  Dim As Integer count = 1, count2
  Dim As Integer i, j, k = 1
  Dim As Integer ub = 22000 '' big enough to deal with up to 2005 ludic numbers
  Dim a(2 To ub) As Integer
  For i = 2 To ub : a(i) = i : Next
 
  Do
     k += 1
 
     For i = k to ub
       If a(i) > 0 Then 
         count += 1 
         lu(count) = a(i)
         If n = count Then Return
         a(i) = 0  
         k = i             
         Exit For
       End If
     Next 
 
     count2 = 0
     j = k + 1 
 
     While j <= ub
       If a(j) > 0 Then
         count2 +=1
         If count2 = k Then
           a(j) = 0
           count2 = 0
         End If
       End If
       j += 1
     Wend
   Loop
 
End Sub
 
Dim i As Integer
Dim lu() As Integer
ludic(2005, lu())
Print "The first 25 Ludic numbers are :" 
For i = 1 To 25
  Print Using "###"; lu(i); 
  Print " ";
Next
Print
 
Dim As Integer Count  = 0
For i = 1 To 1000 
  If lu(i) <= 1000 Then
    count += 1
  Else
    Exit For
  End If
Next
Print
Print "There are"; count; " Ludic numbers <= 1000"
Print
 
Print "The 2000th to 2005th Ludics are :"
For i = 2000 To 2005
  Print lu(i); " ";
Next
Print : Print
 
Print "The Ludic triplets below 250 are : "
Dim As Integer j, k, ldc
Dim b As Boolean
For i = 1 To 248
   ldc = lu(i)
   If ldc >= 244 Then Exit For
   b = False
   For j = i + 1 To 249
     If lu(j) = ldc + 2 Then
       b = True
       k = j
       Exit For
     ElseIf lu(j) > ldc + 2 Then
       Exit For
     End If
   Next j
   If b = False Then Continue For
   For j = k + 1 To 250
     If lu(j) = ldc + 6 Then
       Print "("; Str(ldc); ","; ldc + 2; ","; ldc + 6; ")"
       Exit For
     ElseIf lu(j) > ldc + 6 Then
       Exit For
     End If
   Next j
Next i
Erase lu
Print 
 
Print "Press any key to quit"
Sleep 