📜  打印第一个N个马赛克数字

📅  最后修改于: 2021-04-23 06:53:33             🧑  作者: Mango

给定一个整数N,任务是打印第N个马赛克数字。镶嵌数可以表示为:

例子:

方法
从1到N循环运行,我们必须通过将数字除以因子,直到因子除以数字,对于每个i,我们都必须找到所有素数以及因子在幂中的幂。然后,第mos个数将是找到的素数及其功效的乘积。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Function to return the nth mosaic number
int mosaic(int n)
{
    int i, ans = 1;
  
    // Iterate from 2 to the number
    for (i = 2; i <= n; i++) {
  
        // If i is the factor of n
        if (n % i == 0 && n > 0) {
            int count = 0;
  
            // Find the count where i^count
            // is a factor of n
            while (n % i == 0) {
  
                // Divide the number by i
                n /= i;
  
                // Increase the count
                count++;
            }
  
            // Multiply the answer with
            // count and i
            ans *= count * i;
        }
    }
  
    // Return the answer
    return ans;
}
  
// Function to print first N Mosaic numbers
void nMosaicNumbers(int n)
{
    for (int i = 1; i <= n; i++)
        cout << mosaic(i) << " ";
}
  
// Driver code
int main()
{
    int n = 10;
    nMosaicNumbers(n);
  
    return 0;
}


Java
// Java implementation of the approach
class GFG
{
  
    // Function to return the nth mosaic number
    static int mosaic(int n)
    {
        int i, ans = 1;
  
        // Iterate from 2 to the number
        for (i = 2; i <= n; i++)
        {
  
            // If i is the factor of n
            if (n % i == 0 && n > 0)
            {
                int count = 0;
  
                // Find the count where i^count
                // is a factor of n
                while (n % i == 0) 
                {
  
                    // Divide the number by i
                    n /= i;
  
                    // Increase the count
                    count++;
                }
  
                // Multiply the answer with
                // count and i
                ans *= count * i;
            }
        }
  
        // Return the answer
        return ans;
    }
  
    // Function to print first N Mosaic numbers
    static void nMosaicNumbers(int n)
    {
        for (int i = 1; i <= n; i++)
            System.out.print( mosaic(i)+ " ");
    }
  
    // Driver code
    public static void main(String[] args) 
    {
  
        int n = 10;
        nMosaicNumbers(n);
    }
}
  
// This code contributed by Rajput-Ji


C#
// C# implementation of the approach 
using System;
  
class GFG 
{ 
  
    // Function to return the nth mosaic number 
    static int mosaic(int n) 
    { 
        int i, ans = 1; 
  
        // Iterate from 2 to the number 
        for (i = 2; i <= n; i++) 
        { 
  
            // If i is the factor of n 
            if (n % i == 0 && n > 0) 
            { 
                int count = 0; 
  
                // Find the count where i^count 
                // is a factor of n 
                while (n % i == 0) 
                { 
  
                    // Divide the number by i 
                    n /= i; 
  
                    // Increase the count 
                    count++; 
                } 
  
                // Multiply the answer with 
                // count and i 
                ans *= count * i; 
            } 
        } 
  
        // Return the answer 
        return ans; 
    } 
  
    // Function to print first N Mosaic numbers 
    static void nMosaicNumbers(int n) 
    { 
        for (int i = 1; i <= n; i++) 
            Console.Write( mosaic(i)+ " "); 
    } 
  
    // Driver code 
    public static void Main() 
    { 
  
        int n = 10; 
        nMosaicNumbers(n); 
    } 
} 
  
// This code is contributed by AnkitRai01


Python
# Python implementation of the approach
  
# Function to return the nth mosaic number
def mosaic( n):
    ans = 1
  
    # Iterate from 2 to the number
    for i in range(2,n+1):
  
        # If i is the factor of n
        if (n % i == 0 and n > 0):
            count = 0;
  
            # Find the count where i^count
            # is a factor of n
            while (n % i == 0): 
  
                # Divide the number by i
                n = n// i
  
                # Increase the count
                count+=1;
              
  
            # Multiply the answer with
            # count and i
            ans *= count * i;
      
  
    # Return the answer
    return ans;
  
  
# Function to print first N Mosaic numbers
def nMosaicNumbers(n):
    for i in range(1,n+1):
        print mosaic(i), 
  
  
# Driver code
n = 10;
nMosaicNumbers(n);
  
# This code is coributed by CrazyPro


输出:
1 2 3 4 5 6 7 6 6 10