📜  生成n个连续复合数字的列表(一种有趣的方法)

📅  最后修改于: 2021-04-24 19:33:33             🧑  作者: Mango

给定数字n,生成n个复合数字的列表。
例子:

Input : 5
Output : 122, 123, 124, 125

Input : 10
Output : 3628802, 3628803, 3628804, 3628805, 3628806, 
         3628807, 3628808, 3628809, 3628810

这里的想法是使用n!  。自从n! = 1\times2\times3....(n-1)\times n  ,然后是数字1, 2, 3..... (n-1), n  ,所有分裂n!  。所以n!+2  可被2整除n!+3  可被3整除….. n!+n  可被n整除。按照上述模式,它们是连续的复合材料。
我们找到(n + 1)!,然后打印数字(n + 1)! + 2,(n + 1)! + 3,…。 (n + 1)! +(n + 1)。
下面是上述方法的实现:

C++
// CPP program to print n consecutive composite
// numbers.
#include 
using namespace std;
 
// function to find factorial of given
// number
unsigned long long int factorial(unsigned int n)
{   
    unsigned long long int res = 1;
    for (int i=2; i<=n; i++)
        res *= i;
    return res;
}
 
// Prints n consecutive numbers.
void printNComposite(int n)
{
    unsigned long long int fact = factorial(n+1);
    for (int i = 2; i <= n+1; ++i)
        cout << fact + i << " ";
}
 
// Driver program to test above function
int main()
{
    int n = 4;
    printNComposite(n);
    return 0;
}


Java
// Java program to print n consecutive composite
// numbers
 
class GFG {
 
// function to find factorial of given
// number
    static long factorial(int n) {
        long res = 1;
        for (int i = 2; i <= n; i++) {
            res *= i;
        }
        return res;
    }
 
// Prints n consecutive numbers.
    static void printNComposite(int n) {
        long fact = factorial(n + 1);
        for (int i = 2; i <= n + 1; ++i) {
            System.out.print(fact + i + " ");
        }
    }
 
// Driver program to test above function
    public static void main(String[] args) {
        int n = 4;
        printNComposite(n);
 
    }
}


Python3
# Python3 program to print n consecutive
# composite numbers.
 
# function to find factorial
# of given number
def factorial( n):
 
    res = 1;
    for i in range(2, n + 1):
        res *= i;
    return res;
 
# Prints n consecutive numbers.
def printNComposite(n):
    fact = factorial(n + 1);
    for i in range(2, n + 2):
        print(fact + i, end = " ");
 
# Driver Code
n = 4;
printNComposite(n);
     
# This code is contributed by mits


C#
// C# program to print n consecutive composite
// numbers
using System;
                     
public class Program{
  
// function to find factorial of given
// number
    static long factorial(int n) {
        long res = 1;
        for (int i = 2; i <= n; i++) {
            res *= i;
        }
        return res;
    }
  
// Prints n consecutive numbers.
    static void printNComposite(int n) {
        long fact = factorial(n + 1);
        for (int i = 2; i <= n + 1; ++i) {
            Console.Write(fact + i + " ");
        }
    }
  
// Driver program to test above function
    public static void Main() {
        int n = 4;
        printNComposite(n);
  
    }
}
 
// This code is contributed by Rajput-Ji


PHP


Javascript


输出:
122 123 124 125

上面的解决方案很快就会导致溢出(对于较小的n值)。我们可以使用技术来查找大量的阶乘以避免溢出。