Ludic Numbers

Ludic numbers are obtained by considering list of natural numbers (starting from 2) and removing i-th number in i-th iteration (where i begins with 2). In every iteration, the first removed number is Ludic. 1 is considered as Ludic.

Process of generating Ludic numbers :

Ludic = {1, …}

Consider natural numbers from 2,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 …

Delete every 2nd number
3, 5, 7, 9, 11, 13, 15, 17, 19, 21 ..
The first deleted number is 2.
Ludic = {1, 2, …}

Delete every 3rd number.
5, 7, 11, 13, 17, 19, 22 ..
The first deleted number is 3
Ludic = {1, 2, 3, …}

Delete every 4th number.
5, 7, 11, 13, 17, 19, 22 ..
The first deleted number is 5
Ludic = {1, 2, 3, 5, ..}

This process continues..

The process is similar to Sieve of Eratosthenes.

Given a number n, print all Ludic numbers smaller than or equal to n.

Examples :

Input : n = 10
Output : 1, 2, 3, 5, 7

Input : n = 25
Output : 1, 2, 3, 5, 7, 11, 13, 17, 23, 25 


The idea to print Ludic Numbers is simple. We create a list of size and use above illustrated process. In each iteration, we delete every i-th number, we do not delete the current first number so that we can return it later.

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java code to print Lucid number smaller than
// or equal to n.
import java.util.ArrayList;
import java.util.List;
  
public class Ludic {
  
    // Returns a list containing all Ludic numbers
    // smaller than or equal to n.
    public static List<Integer> getLudic(int n)
    {
        // ludics list contain all the ludic numbers
        List<Integer> ludics = new ArrayList<Integer>(n);
        for (int i = 1; i <= n; i++) 
            ludics.add(i);
          
        // Here we have to start with index 1 and will remove nothing
        // from the list
        for (int index = 1; index < ludics.size(); index++) {
  
            // Here first item should be included in the list
            // and the deletion is refered by this first item
            // in the loop .
            int first_ludic = ludics.get(index);
  
            // remove_index variable is used to store
            // the next index which we want to delete
            int remove_index = index + first_ludic;
            while (remove_index < ludics.size()) {
  
                // removing the next item
                ludics.remove(remove_index);
  
                // remove_index is updated so that
                // we get the next index for deletion
                remove_index = remove_index + first_ludic - 1;
            }
        }
        return ludics;
    }
  
    public static void main(String[] srgs)
    {
        int n = 25;
        System.out.println(getLudic(n));
    }
}

chevron_right


Output:

[1, 2, 3, 5, 7, 11, 13, 17, 23, 25]

References :
https://oeis.org/wiki/Ludic_numbers



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.