Given an array arr[] consisting of N distinct positive integers, the task is to print the first K distinct Moran Numbers from the given array.
A number N is a Moran number if N divided by the sum of its digits gives a prime number.
Examples: 18, 21, 27, 42, 45
Examples:
Input: arr[] = {192, 21, 18, 138, 27, 42, 45}, K = 4
Output: 21, 27, 42, 45
Explanation:
- The sum of digits of the integer 21 is 2 + 1 = 3. Therefore, dividing 21 by its sum of digits = 21 / 3 = 7, which is a prime number.
- The sum of digits of the integer 27 is 2 + 7 = 9. Therefore, dividing 27 by its sum of digits results in 27 / 9 = 3, which is a prime number.
- The sum of digits of the integer 42 is 4 + 2 = 6. Therefore, dividing 42 by its sum of digits results in 42 / 6 = 7, which is a prime number.
- The sum of digits of the integer 45 is 4 + 5 = 9. Therefore, dividing 45 by its sum of digits results in 45 / 9 = 5, which is a prime number.
Input: arr[]={127, 186, 198, 63, 27, 91}, K = 3
Output: 27, 63, 198
Approach: Follow the steps given below to solve the problem:
- Sort the array
- Traverse the sorted array and for each element, check if it is a Moran number or not
- If found to be true, insert the element in a Set and increment the counter until it reaches K.
- Print the elements in the Set when the size of the set is equal to K.
Below is the implementation of the above approach:
#include <algorithm> #include <iostream> #include <set> using namespace std;
// Function to calculate the // sum of digits of a number int digiSum( int a)
{ // Stores the sum of digits
int sum = 0;
while (a) {
// Add the digit to sum
sum += a % 10;
// Remove digit
a = a / 10;
}
// Returns the sum
// of digits
return sum;
} // Function to check if a number // is prime or not bool isPrime( int r)
{ bool s = true ;
for ( int i = 2; i * i <= r; i++) {
// If r has any divisor
if (r % i == 0) {
// Set r as non-prime
s = false ;
break ;
}
}
return s;
} // Function to check if a // number is moran number bool isMorannumber( int n)
{ int dup = n;
// Calculate sum of digits
int sum = digiSum(dup);
// Check if n is divisible
// by the sum of digits
if (n % sum == 0) {
// Calculate the quotient
int c = n / sum;
// If the quotient is prime
if (isPrime(c)) {
return true ;
}
}
return false ;
} // Function to print the first K // Moran numbers from the array void FirstKMorannumber( int a[],
int n, int k)
{ int X = k;
// Sort the given array
sort(a, a + n);
// Initialise a set
set< int > s;
// Traverse the array from the end
for ( int i = n - 1; i >= 0
&& k > 0;
i--) {
// If the current array element
// is a Moran number
if (isMorannumber(a[i])) {
// Insert into the set
s.insert(a[i]);
k--;
}
}
if (k > 0) {
cout << X << " Moran numbers are"
<< " not present in the array" << endl;
return ;
}
set< int >::iterator it;
for (it = s.begin(); it != s.end(); ++it) {
cout << *it << ", " ;
}
cout << endl;
} // Driver Code int main()
{ int A[] = { 34, 198, 21, 42,
63, 45, 22, 44, 43 };
int K = 4;
int N = sizeof (A) / sizeof (A[0]);
FirstKMorannumber(A, N, K);
return 0;
} |
import java.io.*;
import java.util.*;
class GFG{
// Function to calculate the // sum of digits of a number static int digiSum( int a)
{ // Stores the sum of digits
int sum = 0 ;
while (a != 0 )
{
// Add the digit to sum
sum += a % 10 ;
// Remove digit
a = a / 10 ;
}
// Returns the sum
// of digits
return sum;
} // Function to check if a number // is prime or not static boolean isPrime( int r)
{ boolean s = true ;
for ( int i = 2 ; i * i <= r; i++)
{
// If r has any divisor
if (r % i == 0 )
{
// Set r as non-prime
s = false ;
break ;
}
}
return s;
} // Function to check if a // number is moran number static boolean isMorannumber( int n)
{ int dup = n;
// Calculate sum of digits
int sum = digiSum(dup);
// Check if n is divisible
// by the sum of digits
if (n % sum == 0 )
{
// Calculate the quotient
int c = n / sum;
// If the quotient is prime
if (isPrime(c))
{
return true ;
}
}
return false ;
} // Function to print the first K // Moran numbers from the array static void FirstKMorannumber( int [] a,
int n, int k)
{ int X = k;
// Sort the given array
Arrays.sort(a);
// Initialise a set
TreeSet<Integer> s = new TreeSet<Integer>();
// Traverse the array from the end
for ( int i = n - 1 ; i >= 0 && k > 0 ; i--)
{
// If the current array element
// is a Moran number
if (isMorannumber(a[i]))
{
// Insert into the set
s.add(a[i]);
k--;
}
}
if (k > 0 )
{
System.out.println(X + " Moran numbers are" +
" not present in the array" );
return ;
}
for ( int value : s)
System.out.print(value + ", " );
System.out.print( "\n" );
} // Driver Code public static void main(String[] args)
{ int [] A = { 34 , 198 , 21 , 42 ,
63 , 45 , 22 , 44 , 43 };
int K = 4 ;
int N = A.length;
FirstKMorannumber(A, N, K);
} } // This code is contributed by akhilsaini |
import math
# Function to calculate the # sum of digits of a number def digiSum(a):
# Stores the sum of digits
sums = 0
while (a ! = 0 ):
# Add the digit to sum
sums + = a % 10
# Remove digit
a = a / / 10
# Returns the sum
# of digits
return sums
# Function to check if a number # is prime or not def isPrime(r):
s = True
for i in range ( 2 , int (math.sqrt(r)) + 1 ):
# If r has any divisor
if (r % i = = 0 ):
# Set r as non-prime
s = False
break
return s
# Function to check if a # number is moran number def isMorannumber(n):
dup = n
# Calculate sum of digits
sums = digiSum(dup)
# Check if n is divisible
# by the sum of digits
if (n % sums = = 0 ):
# Calculate the quotient
c = n / / sums
# If the quotient is prime
if isPrime(c):
return True
return False
# Function to print the first K # Moran numbers from the array def FirstKMorannumber(a, n, k):
X = k
# Sort the given array
a.sort()
# Initialise a set
s = set ()
# Traverse the array from the end
for i in range (n - 1 , - 1 , - 1 ):
if (k < = 0 ):
break
# If the current array element
# is a Moran number
if (isMorannumber(a[i])):
# Insert into the set
s.add(a[i])
k - = 1
if (k > 0 ):
print (X, end = ' Moran numbers are not '
'present in the array' )
return
lists = sorted (s)
for i in lists:
print (i, end = ', ' )
# Driver Code if __name__ = = '__main__' :
A = [ 34 , 198 , 21 , 42 ,
63 , 45 , 22 , 44 , 43 ]
K = 4
N = len (A)
FirstKMorannumber(A, N, K)
# This code is contributed by akhilsaini |
using System;
using System.Collections;
using System.Collections.Generic;
class GFG{
// Function to calculate the // sum of digits of a number static int digiSum( int a)
{ // Stores the sum of digits
int sum = 0;
while (a != 0)
{
// Add the digit to sum
sum += a % 10;
// Remove digit
a = a / 10;
}
// Returns the sum
// of digits
return sum;
} // Function to check if a number // is prime or not static bool isPrime( int r)
{ bool s = true ;
for ( int i = 2; i * i <= r; i++)
{
// If r has any divisor
if (r % i == 0)
{
// Set r as non-prime
s = false ;
break ;
}
}
return s;
} // Function to check if a // number is moran number static bool isMorannumber( int n)
{ int dup = n;
// Calculate sum of digits
int sum = digiSum(dup);
// Check if n is divisible
// by the sum of digits
if (n % sum == 0)
{
// Calculate the quotient
int c = n / sum;
// If the quotient is prime
if (isPrime(c))
{
return true ;
}
}
return false ;
} // Function to print the first K // Moran numbers from the array static void FirstKMorannumber( int [] a,
int n, int k)
{ int X = k;
// Sort the given array
Array.Sort(a);
// Initialise a set
SortedSet< int > s = new SortedSet< int >();
// Traverse the array from the end
for ( int i = n - 1; i >= 0 && k > 0; i--)
{
// If the current array element
// is a Moran number
if (isMorannumber(a[i]))
{
// Insert into the set
s.Add(a[i]);
k--;
}
}
if (k > 0)
{
Console.WriteLine(X + " Moran numbers are" +
" not present in the array" );
return ;
}
foreach ( var val in s)
{
Console.Write(val + ", " );
}
Console.Write( "\n" );
} // Driver Code public static void Main()
{ int [] A = { 34, 198, 21, 42,
63, 45, 22, 44, 43 };
int K = 4;
int N = A.Length;
FirstKMorannumber(A, N, K);
} } // This code is contributed by akhilsaini |
<script> // Function to calculate the // sum of digits of a number function digiSum(a)
{ // Stores the sum of digits
let sum = 0;
while (a) {
// Add the digit to sum
sum += a % 10;
// Remove digit
a = Math.floor(a / 10);
}
// Returns the sum
// of digits
return sum;
} // Function to check if a number // is prime or not function isPrime(r)
{ let s = true ;
for (let i = 2; i * i <= r; i++) {
// If r has any divisor
if (r % i == 0) {
// Set r as non-prime
s = false ;
break ;
}
}
return s;
} // Function to check if a // number is moran number function isMorannumber(n)
{ let dup = n;
// Calculate sum of digits
let sum = digiSum(dup);
// Check if n is divisible
// by the sum of digits
if (n % sum == 0) {
// Calculate the quotient
let c = n / sum;
// If the quotient is prime
if (isPrime(c)) {
return true ;
}
}
return false ;
} // Function to print the first K // Moran numbers from the array function FirstKMorannumber(a, n, k)
{ let X = k;
// Sort the given array
a = a.sort((x, y) => x - y)
// Initialise a set
let s = new Set();
// Traverse the array from the end
for (let i = n - 1; i >= 0
&& k > 0;
i--) {
// If the current array element
// is a Moran number
if (isMorannumber(a[i])) {
// Insert into the set
s.add(a[i]);
k--;
}
}
if (k > 0) {
document.write(X + " Moran numbers are"
+ " not present in the array" + "<br>" );
return ;
}
// Convert the set into array and then sort the array
s = [...s].sort((a, b) => a - b)
for (let it of s) {
document.write(it + ", " );
}
document.write( "<br>" );
} // Driver Code let A = [ 34, 198, 21, 42,
63, 45, 22, 44, 43 ];
let K = 4;
let N = A.length;
FirstKMorannumber(A, N, K);
// This code is contributed by gfgking
</script> |
42, 45, 63, 198,
Time Complexity: O(N3/2)
Auxiliary Space: O(N)