Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Java Program to Check if a Given Number is Perfect Number

  • Last Updated : 04 Dec, 2020

A number is said to be a perfect number if the sum of its proper divisors ( i.e. all positive divisors excluding the number itself )is equal to that number itself. Aliquot sum is the sum of divisors of a number, excluding the number itself. Hence, a number is a perfect number only if it is equal to its aliquot sum. All known perfect numbers are even

Example 1:

n = 9
Proper Divisors of 9 are 1 and 3.
Sum = 1+3 = 4 ≠ 9
⇒ 9 is not a perfect number.

Example 2:

n = 6
Proper Divisors of 6 are 1, 2 and 3.
Sum = 1+2+3 = 6 = 6
⇒ 6 is a perfect number.

Example 3:

n = 28
Proper Divisors of 28 are 1, 2, 4, 7 and 14.
Sum = 1+2+4+7+14 = 28 = 28
⇒ 28 is a perfect number.

Example 4:

n = 15
Proper Divisors of 15 are 1,3 and 5.
Sum = 1+3+5 = 9 ≠ 15
⇒ 15 is not a perfect number.

So, we basically have to find the sum of proper divisors of a number.

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections 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.

Approach 1:  

A Simple Solution is to go through every number from 1 to n-1 and check if it is a divisor and if it is, then add it in the sum variable and at the end check if the sum is equal to the number itself, then it is a perfect number otherwise not.



Java




// Java program to check if a given
// number is perfect or not
  
class GFG {
  
    // Returns true if n is perfect
    static boolean isPerfect(int n)
    {
        // 1 is not a perfect number
        if (n == 1)
            return false;
  
        // sum will store the sum of proper divisors
        // As 1 is a proper divisor for all numbers
        // initialised sum with 1
        int sum = 1;
  
        // Looping through the numbers to check if they are
        // divisors or not
        for (int i = 2; i < n; i++) {
            
            if (n % i == 0) {
                sum += i;
            }
            
        }
  
        // If sum of divisors is equal to
        // n, then n is a perfect number
        if (sum == n)
            return true;
  
        return false;
    }
  
    // Driver program
    public static void main(String[] args)
    {
        int n = 6;
        
        // Call isPerfect function to
        // check if the number is perfect or not.
        if (isPerfect(n))
            System.out.println(n + " is a perfect number");
        else
            System.out.println(
                n + " is not a perfect number");
    }
}
Output
6 is a perfect number
  • Time Complexity: O(n)

Approach 2:

An Efficient Solution is to go through numbers till the square root of n. 

If i is a divisor then n/i is also a divisor. 

Java




// Java program to check if a given
// number is perfect or not
  
class GFG {
  
    // Returns true if n is perfect
    static boolean isPerfect(int n)
    {
        // 1 is not a perfect number
        if (n == 1)
            return false;
  
        // sum will store the sum of proper divisors
        // As 1 is a proper divisor for all numbers
        // initialised sum with 1
        int sum = 1;
  
        // Looping through the numbers to check if they are
        // divisors or not
        for (int i = 2; i * i <= n; i++) {
            
            if (n % i == 0) {
                
                // n is a perfect square
                // let's take 25
                // we need to add 5 only once
                // sum += i + n / i will add it twice
                
                if (i * i == n)
                    sum += i;
                else
                    sum += i + (n / i);
            }
        }
  
        // If sum of divisors is equal to
        // n, then n is a perfect number
        
        if (sum == n)
            
            return true;
  
        return false;
    }
  
    // Driver program
    public static void main(String[] args)
    {
        int n = 6;
        
        // Call isPerfect function to
        // check if the number is perfect or not.
        if (isPerfect(n))
            
            System.out.println(n + " is a perfect number");
        
        else
            System.out.println(
                n + " is not a perfect number");
    }
}
Output
6 is a perfect number

Time Complexity: O(√n)




My Personal Notes arrow_drop_up
Recommended Articles
Page :