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. 


-- Generate a list of the ludic numbers up to and including n.
on ludicsTo(n)
    if (n < 1) then return {}
    -- Start with an array of numbers from 2 to n and a ludic collection already containing 1.
    script o
        property array : {}
        property ludics : {1}
    end script
    repeat with i from 2 to n
        set end of o's array to i
    end repeat
    -- Collect ludics and sieve the array until a ludic matches or exceeds the remaining
    -- array length, at which point the array contains just the remaining ludics.
    set thisLudic to 2
    set arrayLength to n - 1
    repeat while (thisLudic < arrayLength)
        set end of o's ludics to thisLudic
        repeat with i from 1 to arrayLength by thisLudic
            set item i of o's array to missing value
        end repeat
        set o's array to o's array's numbers
        set thisLudic to beginning of o's array
        set arrayLength to (count o's array)
    end repeat
 
    return (o's ludics) & (o's array)
end ludicsTo
 
on doTask()
    script o
        property ludics : ludicsTo(22000)
    end script
 
    set output to {}
    set astid to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ", "
    set end of output to "First 25 ludic numbers:"
    set end of output to (items 1 thru 25 of o's ludics) as text
    repeat with i from 1 to (count o's ludics)
        if (item i of o's ludics > 1000) then exit repeat
    end repeat
    set end of output to "There are " & (i - 1) & " ludic numbers ≤ 1000."
    set end of output to "2000th-2005th ludic numbers:"
    set end of output to (items 2000 thru 2005 of o's ludics) as text
    set end of output to "Triplets < 250:"
    set triplets to {}
    repeat with x in o's ludics
        set x to x's contents
        if (x > 243) then exit repeat
        if ((x + 2) is in o's ludics) and ((x + 6) is in o's ludics) then
            set end of triplets to "{" & {x, x + 2, x + 6} & "}"
        end if
    end repeat
    set end of output to triplets as text
    set AppleScript's text item delimiters to linefeed
    set output to output as text
    set AppleScript's text item delimiters to astid
 
    return output
end doTask
 
return doTask()