通过考虑自然数列表(从2开始)并在第i次迭代中删除第i个数字(其中i以2开头)来获得幻数。在每次迭代中,第一个删除的数字是Ludic。 1被认为是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..
该过程类似于Eratosthenes筛。
给定数字n,请打印所有小于或等于n的Ludic数字。
例子 :
Input : n = 10
Output : 1, 2, 3, 5, 7
Input : n = 25
Output : 1, 2, 3, 5, 7, 11, 13, 17, 23, 25
打印Ludic Numbers的想法很简单。我们创建尺寸列表并使用上述过程。在每次迭代中,我们都会删除第i个数字,而不会删除当前的第一个数字,以便稍后返回。
C++
// C++ code to print Lucid
// number smaller than or
// equal to n.
#include
using namespace std;
// Returns a list containing
// all Ludic numbers smaller
// than or equal to n.
vector getLudic(int n)
{
// ludics list contain all
// the ludic numbers
vector ludics;
for (int i = 1; i <= n; i++)
ludics.push_back(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[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
auto it = ludics.begin();
it = it + remove_index;
ludics.erase(it);
// Remove_index is updated so that
// we get the next index for deletion
remove_index = remove_index + first_ludic - 1;
}
}
return ludics;
}
// Driver code
int main()
{
int n = 25;
vector ans = getLudic(n);
cout << "[";
for (int i = 0; i < ans.size() - 1; i++)
{
cout << ans[i] << ", ";
}
cout << ans[ans.size() - 1] << "]";
return 0;
}
// This code is contributed by divyeshrabadiya07
Java
// 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));
}
}
Python3
# Python3 code to print Lucid
# number smaller than or equal
# to n.
# Returns a list containing all
# Ludic numbers smaller than
# or equal to n.
def getLudic(n):
# ludics list contain all
# the ludic numbers
ludics = []
for i in range(1, n + 1):
ludics.append(i)
# Here we have to start with
# index 1 and will remove
# nothing from the list
index = 1
while(index != len(ludics)):
# Here first item should be
# included in the list and
# the deletion is refered
# by this first item
# in the loop .
first_ludic = ludics[index]
# Remove_index variable is used
# to store the next index which
# we want to delete
remove_index = index + first_ludic
while(remove_index < len(ludics)):
# Removing the next item
ludics.remove(ludics[remove_index])
# Remove_index is updated so that
# we get the next index for deletion
remove_index = remove_index + first_ludic - 1
index += 1
return ludics
# Driver code
n = 25
print(getLudic(n))
# This code is contributed by avanitrachhadiya2155
C#
// C# code to print Lucid number smaller
// than or equal to n.
using System;
using System.Collections;
class GFG{
// Returns a list containing all Ludic
// numbers smaller than or equal to n.
public static ArrayList getLudic(int n)
{
// ludics list contain all the
// ludic numbers
ArrayList ludics = new ArrayList();
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.Count;
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 = (int)ludics[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.Count)
{
// Removing the next item
ludics.Remove(ludics[remove_index]);
// remove_index is updated so that
// we get the next index for deletion
remove_index = remove_index +
first_ludic - 1;
}
}
return ludics;
}
// Driver code
public static void Main(string[] srgs)
{
int n = 25;
ArrayList tmp = getLudic(n);
Console.Write("[");
foreach(int x in tmp)
{
Console.Write(x + ", ");
}
Console.Write("]");
}
}
// This code is contributed by rutvik_56
输出:
[1, 2, 3, 5, 7, 11, 13, 17, 23, 25]
参考 :
https://oeis.org/wiki/Ludic_numbers