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:
- Declare a function, isPerfect() to check if the number is a perfect number or not.
- Declare another function, sumOfDigits() to calculate the sum of all the digits of a number.
- 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.
- If arr[i] is a perfect number:
Below is the implementation of the above approach:
C++
// C++ program for the above approach#include <bits/stdc++.h>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 numbers 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 approachimport 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 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 numbers 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)): # Print that 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 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 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
<script>// JavaScript program for the above approach// Function to check if a number// is perfect number or notfunction isPerfect(N){ // Stores sum of proper divisors let sumOfDivisors = 1; for (let i = 2; i <= Math.floor(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 numberfunction sumOfDigits(N){ // Stores sum of digits let sum = 0; while (N != 0) { sum += (N % 10); N = Math.floor(N / 10); } // Return sum of digits return sum;}// Function to count perfect numbers from// an array whose sum of digits is also perfectfunction countPerfectNumbers(arr, N){ // Traverse the array for (let i = 0; i < N; ++i) { // If number is perfect if (isPerfect(arr[i])) { // Stores sum of digits // of the number let sum = sumOfDigits(arr[i]); // If that is also perfect number if (isPerfect(sum)) { // Print that number document.write(arr[i] + " "); } } }}// Driver Code // Given array let arr = [ 3, 8, 12, 28, 6 ]; // Size of the array let N = arr.length; // Function call to count perfect numbers // having sum of digits also perfect countPerfectNumbers(arr, N);// This code is contributed by Surbhi Tyagi.</script> |
6
Time Complexity: O(N3 * log N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
