# 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 ```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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.

 `// 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 getLudic(``int` `n) ` `    ``{ ` `        ``// ludics list contain all the ludic numbers ` `        ``List ludics = ``new` `ArrayList(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)); ` `    ``} ` `} `

Output:

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

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

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

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.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.