给定一个整数N,任务是打印第N个马赛克数字。镶嵌数可以表示为:
If N = p1a1p2a2…pkak in the prime facrorization of N
where p1 ,p2 … pk are prime numbers.
Then the Nth Mosaic number is equal to ((p1)*(a1))*((p2)*(a2))*…*((pk)*(ak))
例子:
Input : N=10
Output : 1 2 3 4 5 6 7 6 6 10
For N = 4, N = 22 .
4th Mosaic number = 2*2 = 4
For N=8 , N= 2 3
8th Mosaic number = 2*3 = 6
Similarly print first N Mosaic numbers
Input : N=5
Output : 1 2 3 4 5
方法:
从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