# 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 numberint 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 notbool 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 numberbool 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 arrayvoid FirstKMorannumber(int a[],                       int n, int k){    int X = k;     // Sort the given array    sort(a, a + n);     // Initialise a set    set 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::iterator it;    for (it = s.begin(); it != s.end(); ++it) {        cout << *it << ", ";    }    cout << endl;} // Driver Codeint 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 numberstatic 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 notstatic 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 numberstatic 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 arraystatic 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 Codepublic 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 numberdef 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 notdef 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 numberdef 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 arraydef 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 Codeif __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 numberstatic 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 notstatic 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 numberstatic 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 arraystatic void FirstKMorannumber(int[] a,                              int n, int k){    int X = k;     // Sort the given array    Array.Sort(a);     // Initialise a set    SortedSet s = new SortedSet();     // 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 Codepublic 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)

Previous
Next