# Print all Perfect Numbers from an array whose sum of digits is also a Perfect Number

• Difficulty Level : Expert
• Last Updated : 29 Jun, 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:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: arr[] = { 3, 8, 12, 28, 6 }
Output: 6
Explanation: The array element arr (= 6) is a perfect number. The array element arr (= 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 calculate 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 not``int` `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 number``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 numbers from``// an array whose sum of digits is also perfect``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``                ``cout << arr[i] << ``" "``;``            ``}``        ``}``    ``}``}` `// Driver Code``int` `main()``{``    ``// Given array``    ``int` `arr[] = { 3, 8, 12, 28, 6 };` `    ``// Size of the array``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``// 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 numbers 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 not``def` `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 number``def` `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 numbers from``# an array whose sum of digits is also perfect``def` `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``)):``              ` `                ``# Print that number``                ``print``(arr[i], end``=``" "``);` `# Driver Code``if` `__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 approach``using` `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 numbers 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 Code``static` `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)

My Personal Notes arrow_drop_up