📌  相关文章
📜  幻数

📅  最后修改于: 2021-05-04 23:54:58             🧑  作者: Mango

通过考虑自然数列表(从2开始)并在第i次迭代中删除第i个数字(其中i以2开头)来获得幻数。在每次迭代中,第一个删除的数字是Ludic。 1被认为是Ludic。

该过程类似于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