Related Articles
Print all Perfect Numbers from an array whose sum of digits is also a Perfect Number
• Difficulty Level : Expert
• Last Updated : 26 Mar, 2021

Given an array arr[] of size N, the task is to print all the perfect numbers from an array whose sum of digits is also a perfect number.

Examples:

Input: arr[] = { 3, 8, 12, 28, 6 }
Output: 6
Explanation: The array element arr[4] (= 6) is a perfect number. The array element arr[3] (= 28) is a perfect number but its sum of digits (= 10) is not a perfect number.

Input: arr[] = { 1, 2, 3 }
Output: 1

Approach: Follow the steps below to solve the problem:

1. Declare a function, isPerfect() to check if the number is a perfect number or not.
2. Declare another function, sumOfDigits() to caluclate the sum of all the digits of a number.
3. Traverse the array arr[]:
• If arr[i] is a perfect number:
• Initialize a variable, say digitSum, to store the sum of digits of the current array element.
• If digitSum is also a perfect number, print that number.

Below is the implementation of the above approach:

## C++

 // C++ program for the above approach #include using namespace std; // Function to check if a number// is perfect number or notint isPerfect(int N){    // Stores sum of proper divisors    int sumOfDivisors = 1;    for (int i = 2; i <= N / 2; ++i) {               if (N % i == 0) {            sumOfDivisors += i;        }    }     // If sum of digits is equal to N,    // then it's a perfect number    if (sumOfDivisors == N) {        return 1;    }     // Otherwise, not a perfect number    else        return 0;} // Function to find the// sum of digits of a numberint sumOfDigits(int N){    // Stores sum of digits    int sum = 0;     while (N != 0) {        sum += (N % 10);        N = N / 10;    }     // Return sum of digits    return sum;} // Function to count perfect numners from// an array whose sum of digits is also perfectvoid countPerfectNumbers(int arr[], int N){    // Traverse the array    for (int i = 0; i < N; ++i) {               // If number is perfect        if (isPerfect(arr[i])) {                       // Stores sum of digits            // of the number            int sum = sumOfDigits(arr[i]);             // If that is also perfect number            if (isPerfect(sum)) {                               // Print that number                cout << arr[i] << " ";            }        }    }} // Driver Codeint main(){    // Given array    int arr[] = { 3, 8, 12, 28, 6 };     // Size of the array    int N = sizeof(arr) / sizeof(arr[0]);     // Function call to count perfect numbers    // having sum of digits also perfect    countPerfectNumbers(arr, N);     return 0;}

## Java

 // Java Program to implement// the above approach import java.io.*;import java.util.*; class GFG {   // Function to check if a number  // is perfect number or not  static boolean isPerfect(int N)  {    // Stores sum of proper divisors    int sumOfDivisors = 1;    for (int i = 2; i <= N / 2; ++i) {       if (N % i == 0) {        sumOfDivisors += i;      }    }     // If sum of digits is equal to N,    // then it's a perfect number    if (sumOfDivisors == N) {      return true;    }     // Otherwise, not a perfect number    else      return false;  }   // Function to find the  // sum of digits of a number  static int sumOfDigits(int N)  {    // Stores sum of digits    int sum = 0;     while (N != 0) {      sum += (N % 10);      N = N / 10;    }     // Return sum of digits    return sum;  }   // Function to count perfect numners from  // an array whose sum of digits is also perfect  static void countPerfectNumbers(int arr[], int N)  {    // Traverse the array    for (int i = 0; i < N; ++i) {       // If number is perfect      if (isPerfect(arr[i])) {         // Stores sum of digits        // of the number        int sum = sumOfDigits(arr[i]);         // If that is also perfect number        if (isPerfect(sum)) {           // Print that number          System.out.print(arr[i] + " ");        }      }    }  }   // Driver Code  public static void main(String[] args)  {         // Given array    int arr[] = { 3, 8, 12, 28, 6 };     // Size of the array    int N = arr.length;     // Function call to count perfect numbers    // having sum of digits also perfect    countPerfectNumbers(arr, N);  }} // This code is contributed by Kingash.

## Python3

 # Python Program to implement# the above approach # Function to check if a number# is perfect number or notdef isPerfect(N):       # Stores sum of proper divisors    sumOfDivisors = 1;    for i in range(2, int(N / 2) + 1):         if (N % i == 0):            sumOfDivisors += i;     # If sum of digits is equal to N,    # then it's a perfect number    if (sumOfDivisors == N):        return True;     # Otherwise, not a perfect number    else:        return False; # Function to find the# sum of digits of a numberdef sumOfDigits(N):       # Stores sum of digits    sum = 0;     while (N != 0):        sum += (N % 10);        N = N // 10;     # Return sum of digits    return sum; # Function to count perfect numners from# an array whose sum of digits is also perfectdef countPerfectNumbers(arr, N):       # Traverse the array    for i in range(N):         # If number is perfect        if (isPerfect(arr[i])):             # Stores sum of digits            # of the number            sum = sumOfDigits(arr[i]);             # If that is also perfect number            if (isPerfect(sum)):                               # Prthat number                print(arr[i], end=" "); # Driver Codeif __name__ == '__main__':       # Given array    arr = [3, 8, 12, 28, 6];     # Size of the array    N = len(arr);     # Function call to count perfect numbers    # having sum of digits also perfect    countPerfectNumbers(arr, N);     # This code is contributed by 29AjayKumar

## C#

 // C# program for the above approachusing System;class GFG{   // Function to check if a number  // is perfect number or not  static bool isPerfect(int N)  {         // Stores sum of proper divisors    int sumOfDivisors = 1;    for (int i = 2; i <= N / 2; ++i) {       if (N % i == 0) {        sumOfDivisors += i;      }    }     // If sum of digits is equal to N,    // then it's a perfect number    if (sumOfDivisors == N) {      return true;    }     // Otherwise, not a perfect number    else      return false;  }   // Function to find the  // sum of digits of a number  static int sumOfDigits(int N)  {         // Stores sum of digits    int sum = 0;     while (N != 0) {      sum += (N % 10);      N = N / 10;    }     // Return sum of digits    return sum;  }   // Function to count perfect numners from  // an array whose sum of digits is also perfect  static void countPerfectNumbers(int []arr, int N)  {         // Traverse the array    for (int i = 0; i < N; ++i) {       // If number is perfect      if (isPerfect(arr[i])) {         // Stores sum of digits        // of the number        int sum = sumOfDigits(arr[i]);         // If that is also perfect number        if (isPerfect(sum)) {           // Print that number          Console.Write(arr[i] + " ");        }      }    }  } // Driver Codestatic public void Main(){       // Given array    int []arr = { 3, 8, 12, 28, 6 };     // Size of the array    int N = arr.Length;     // Function call to count perfect numbers    // having sum of digits also perfect    countPerfectNumbers(arr, N);}} // This code is contributed by jana_sayantan.

## Javascript



Output:
6

Time Complexity: O(N3 * log N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up