# 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