Print first N Mosaic numbers
Given an integer N, the task is to print first N Mosaic numbers. A Mosaic number can be expressed as follows:
If N = p1a1p2a2…pkak in the prime factorization of N
where p1 ,p2 … pk are prime numbers.
Then the Nth Mosaic number is equal to ((p1)*(a1))*((p2)*(a2))*…*((pk)*(ak))
Examples:
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
Approach:
Run a loop from 1 to N and for every i we have to find all the prime factors and also the powers of the factors in the number by dividing the number by the factor until the factor divides the number. The ith Mosaic number will then be the product of the found prime factors and their powers.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int mosaic( int n)
{
int i, ans = 1;
for (i = 2; i <= n; i++) {
if (n % i == 0 && n > 0) {
int count = 0;
while (n % i == 0) {
n /= i;
count++;
}
ans *= count * i;
}
}
return ans;
}
void nMosaicNumbers( int n)
{
for ( int i = 1; i <= n; i++)
cout << mosaic(i) << " " ;
}
int main()
{
int n = 10;
nMosaicNumbers(n);
return 0;
}
|
Java
class GFG
{
static int mosaic( int n)
{
int i, ans = 1 ;
for (i = 2 ; i <= n; i++)
{
if (n % i == 0 && n > 0 )
{
int count = 0 ;
while (n % i == 0 )
{
n /= i;
count++;
}
ans *= count * i;
}
}
return ans;
}
static void nMosaicNumbers( int n)
{
for ( int i = 1 ; i <= n; i++)
System.out.print( mosaic(i)+ " " );
}
public static void main(String[] args)
{
int n = 10 ;
nMosaicNumbers(n);
}
}
|
C#
using System;
class GFG
{
static int mosaic( int n)
{
int i, ans = 1;
for (i = 2; i <= n; i++)
{
if (n % i == 0 && n > 0)
{
int count = 0;
while (n % i == 0)
{
n /= i;
count++;
}
ans *= count * i;
}
}
return ans;
}
static void nMosaicNumbers( int n)
{
for ( int i = 1; i <= n; i++)
Console.Write( mosaic(i)+ " " );
}
public static void Main()
{
int n = 10;
nMosaicNumbers(n);
}
}
|
Python
def mosaic( n):
ans = 1
for i in range ( 2 ,n + 1 ):
if (n % i = = 0 and n > 0 ):
count = 0 ;
while (n % i = = 0 ):
n = n / / i
count + = 1 ;
ans * = count * i;
return ans;
def nMosaicNumbers(n):
for i in range ( 1 ,n + 1 ):
print mosaic(i),
n = 10 ;
nMosaicNumbers(n);
|
Javascript
<script>
function mosaic(n)
{
var i, ans = 1;
for (i = 2; i <= n; i++) {
if (n % i == 0 && n > 0) {
var count = 0;
while (n % i == 0) {
n /= i;
count++;
}
ans *= count * i;
}
}
return ans;
}
function nMosaicNumbers(n)
{
for ( var i = 1; i <= n; i++)
document.write( mosaic(i) + " " );
}
var n = 10;
nMosaicNumbers(n);
</script>
|
Output:
1 2 3 4 5 6 7 6 6 10
Time Complexity: O(logn)
Auxiliary Space: O(1)
Last Updated :
31 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...