📜  从数字总和也是完美数的数组中打印所有完美数

📅  最后修改于: 2021-05-14 09:06:40             🧑  作者: Mango

给定大小为N的数组arr [] ,任务是从数字总和也是理想数的数组中打印所有理想数。

例子:

方法:请按照以下步骤解决问题:

  1. 声明一个函数isPerfect(),以检查数字是否为理想数字。
  2. 声明另一个函数sumOfDigits()以计算数字的所有数字的总和。
  3. 遍历数组arr []
    • 如果arr [i]是一个理想数:
      • 初始化一个变量,例如digitSum,以存储当前数组元素的位数之和。
      • 如果digitSum也是一个理想数字,请打印该数字。

下面是上述方法的实现:

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 numners 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[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 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 numners 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)):
               
                # Prthat 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 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 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


输出:
6

时间复杂度: O(N 3 * log N)
辅助空间: O(1)