# Perfect Number

A number is a perfect number if is equal to sum of its proper divisors, that is, sum of its positive divisors excluding the number itself. Write a function to check if a given number is perfect or not.

Examples:

```Input: n = 15
Output: false
Divisors of 15 are 1, 3 and 5. Sum of
divisors is 9 which is not equal to 15.

Input: n = 6
Output: true
Divisors of 6 are 1, 2 and 3. Sum of
divisors is 6.```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A Simple Solution is to go through every number from 1 to n-1 and check if it is a divisor. Maintain sum of all divisors. If sum becomes equal to n, then return true, else return false.

An Efficient Solution is to go through numbers till square root of n. If a number ‘i’ divides n, then add both ‘i’ and n/i to sum.

Below is the implementation of efficient solution.

## C++

 `// C++ program to check if a given number is perfect ` `// or not ` `#include ` `using` `namespace` `std; ` ` `  `// Returns true if n is perfect ` `bool` `isPerfect(``long` `long` `int` `n) ` `{ ` `    ``// To store sum of divisors ` `    ``long` `long` `int` `sum = 1; ` `  `  `    ``// Find all divisors and add them ` `    ``for` `(``long` `long` `int` `i=2; i*i<=n; i++) ` `    ``{ ` `        ``if` `(n%i==0) ` `        ``{ ` `            ``if``(i*i!=n) ` `                ``sum = sum + i + n/i; ` `            ``else` `                ``sum=sum+i; ` `        ``} ` `    ``}  ` `     ``// If sum of divisors is equal to ` `     ``// n, then n is a perfect number ` `     ``if` `(sum == n && n != 1) ` `          ``return` `true``; ` `  `  `     ``return` `false``; ` `} ` `  `  `// Driver program ` `int` `main() ` `{ ` `    ``cout << ``"Below are all perfect numbers till 10000\n"``; ` `    ``for` `(``int` `n =2; n<10000; n++) ` `        ``if` `(isPerfect(n)) ` `            ``cout << n << ``" is a perfect number\n"``; ` `  `  `    ``return` `0; ` `} `

## 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) ` `{ ` `    ``// To store sum of divisors ` `    ``int` `sum = ``1``; ` ` `  `    ``// Find all divisors and add them ` `    ``for` `(``int` `i = ``2``; i * i <= n; i++) ` `    ``{ ` `        ``if` `(n % i==``0``) ` `        ``{ ` `            ``if``(i * i != n) ` `                ``sum = sum + i + n / i; ` `            ``else` `                ``sum = sum + i; ` `        ``} ` `    ``}  ` `    ``// If sum of divisors is equal to ` `    ``// n, then n is a perfect number ` `    ``if` `(sum == n && n != ``1``) ` `        ``return` `true``; ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver program ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``System.out.println(``"Below are all perfect"` `+  ` `                                ``"numbers till 10000"``); ` `    ``for` `(``int` `n = ``2``; n < ``10000``; n++) ` `        ``if` `(isPerfect(n)) ` `            ``System.out.println( n +  ` `                    ``" is a perfect number"``); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Python3 code to check if a given  ` `# number is perfect or not ` ` `  `# Returns true if n is perfect ` `def` `isPerfect( n ): ` `     `  `    ``# To store sum of divisors ` `    ``sum` `=` `1` `     `  `    ``# Find all divisors and add them ` `    ``i ``=` `2` `    ``while` `i ``*` `i <``=` `n: ` `        ``if` `n ``%` `i ``=``=` `0``: ` `            ``sum` `=` `sum` `+` `i ``+` `n``/``i ` `        ``i ``+``=` `1` `     `  `    ``# If sum of divisors is equal to ` `    ``# n, then n is a perfect number ` `     `  `    ``return` `(``True` `if` `sum` `=``=` `n ``and` `n!``=``1` `else` `False``) ` ` `  `# Driver program ` `print``(``"Below are all perfect numbers till 10000"``) ` `n ``=` `2` `for` `n ``in` `range` `(``10000``): ` `    ``if` `isPerfect (n): ` `        ``print``(n , ``" is a perfect number"``) ` `         `  `# This code is contributed by "Sharad_Bhardwaj". `

## C#

 `// C# program to check if a given  ` `// number is perfect or not ` ` `  `class` `GFG ` `{ ` `     `  `// Returns true if n is perfect ` `static` `bool` `isPerfect(``int` `n) ` `{ ` `    ``// To store sum of divisors ` `    ``int` `sum = 1; ` ` `  `    ``// Find all divisors and add them ` `    ``for` `(``int` `i = 2; i * i <= n; i++) ` `    ``{ ` `        ``if` `(n % i==0) ` `        ``{ ` `            ``if``(i * i != n) ` `                ``sum = sum + i + n / i; ` `            ``else` `                ``sum = sum + i; ` `        ``} ` `    ``}  ` `    ``// If sum of divisors is equal to ` `    ``// n, then n is a perfect number ` `    ``if` `(sum == n && n != 1) ` `        ``return` `true``; ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver program ` `static` `void` `Main() ` `{ ` `    ``System.Console.WriteLine(``"Below are all perfect"` `+  ` `                                ``"numbers till 10000"``); ` `    ``for` `(``int` `n = 2; n < 10000; n++) ` `        ``if` `(isPerfect(n)) ` `            ``System.Console.WriteLine( n +  ` `                    ``" is a perfect number"``); ` `} ` `} ` ` `  `// This code is contributed by chandan_jnu `

## PHP

 ` `

Output:

```Below are all perfect numbers til 10000
6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number```

Time Complexity: √n

Below are some interesting facts about Perfect Numbers:
1) Every even perfect number is of the form 2p?1(2p ? 1) where 2p ? 1 is prime.
2) It is unknown whether there are any odd perfect numbers.

References:

https://en.wikipedia.org/wiki/Perfect_number

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.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

8

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.