# Print first K distinct Moran numbers from a given array

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:

1. Sort the array
2. Traverse the sorted array and for each element, check if it is a Moran number or not
3. If found to be true, insert the element in a Set and increment the counter until it reaches K.
4. Print the elements in the Set when the size of the set is equal to K.

Below is the implementation of the above approach:

## C++

 `#include ` `#include ` `#include ` `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;` `}`

## Java

 `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 s = ``new` `TreeSet();`   `    ``// 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`

## Python3

 `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`

## C#

 `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`

## Javascript

 ``

Output:

`42, 45, 63, 198,`

Time Complexity: O(N3/2)
Auxiliary Space: O(N)

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next