# Abundant Number

A number n is said to be Abundant Number if sum of all the proper divisors of the number denoted by sum(n) is greater than the value of the number n. And the difference between these two values is called the abundance.
Mathematically, if below condition holds the number is said to be Abundant number:

```sum(n)> n
abundance =  sum(n) - n
sum(n): aliquot sum - The sum of all proper divisors of n```

Given a number n, our task is to find if this number is Abundant number or not.

The first few Abundant Numbers are: 12, 18, 20, 24, 30, 36, 40, 42, 48, 54, 56, 60, 66 ….. Examples :

```Input: 21
Output: NO

Input: 12
Output: YES

Input: 17
Output: NO
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1

A Simple solution is to iterate all the numbers from 1 to n-1 and check if the number divides n and calculate the sum. Check if this sum is greater than n or not.

Time Complexity of this approach: O(n)

Optimized Solution:

If we observe carefully, the divisors of the number n are present in pairs. For example if n = 100, then all the pairs of divisors are: (1,100), (2,50), (4,25), (5,20), (10,10)

Using this fact we can speed up our program. While checking divisors we will have to be careful if there are two equal divisors as in case of (10, 10). In such case we will take only one of them in calculation of sum.
Subtract the number n from the sum of all divisors to get the sum of proper divisors.

## C++

 `// An Optimized Solution to check Abundant Number ` `#include ` `using` `namespace` `std; ` ` `  `// Function to calculate sum of divisors ` `int` `getSum(``int` `n) ` `{ ` `    ``int` `sum = 0; ` ` `  `    ``// Note that this loop runs till square root ` `    ``// of n ` `    ``for` `(``int` `i=1; i<=``sqrt``(n); i++) ` `    ``{ ` `        ``if` `(n%i==0) ` `        ``{ ` `            ``// If divisors are equal,take only one ` `            ``// of them ` `            ``if` `(n/i == i) ` `                ``sum = sum + i; ` ` `  `            ``else` `// Otherwise take both ` `            ``{ ` `                ``sum = sum + i; ` `                ``sum = sum + (n / i); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// calculate sum of all proper divisors only ` `    ``sum = sum - n; ` `    ``return` `sum; ` `} ` ` `  `// Function to check Abundant Number ` `bool` `checkAbundant(``int` `n) ` `{ ` `    ``// Return true if sum of divisors is greater ` `    ``// than n. ` `    ``return` `(getSum(n) > n); ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``checkAbundant(12)? cout << ````"YES "``` `: cout << ````"NO "````; ` `    ``checkAbundant(15)? cout << ````"YES "``` `: cout << ````"NO "````; ` `    ``return` `0; ` `} `

## Java

 `// An Optimized Solution to check Abundant Number  ` `// in JAVA ` `import` `java.io.*;  ` `import` `java.math.*; ` ` `  `// Function to calculate sum of divisors ` `class` `GFG{ ` `    ``static` `int` `getSum(``int` `n) ` `    ``{ ` `        ``int` `sum = ``0``; ` `   `  `       ``// Note that this loop runs till square  ` `       ``// root of n ` `        ``for` `(``int` `i=``1``; i<=(Math.sqrt(n)); i++) ` `        ``{ ` `            ``if` `(n%i==``0``) ` `            ``{ ` `             ``// If divisors are equal,take only  ` `             ``// one of them ` `                ``if` `(n/i == i) ` `                   ``sum = sum + i; ` `   `  `                ``else` `// Otherwise take both ` `                ``{ ` `                   ``sum = sum + i; ` `                   ``sum = sum + (n / i); ` `                ``} ` `            ``} ` `        ``} ` `   `  `        ``// calculate sum of all proper divisors  ` `       ``// only ` `        ``sum = sum - n; ` `        ``return` `sum; ` `    ``} ` `   `  `    ``// Function to check Abundant Number ` `    ``static` `boolean` `checkAbundant(``int` `n) ` `    ``{ ` `      ``// Return true if sum of divisors is  ` `      ``// greater than n. ` `      ``return` `(getSum(n) > n); ` `    ``} ` `   `  `    ``/* Driver program to test above function */` `    ``public` `static` `void` `main(String args[])``throws`  `                                   ``IOException ` `    ``{ ` `      ``if``(checkAbundant(``12``)) ` `          ``System.out.println(``"YES"``); ` `      ``else` `          ``System.out.println(``"NO"``); ` `      ``if``(checkAbundant(``15``)) ` `          ``System.out.println(``"YES"``); ` `      ``else` `          ``System.out.println(``"NO"``); ` `    ``} ` `} ` `  `  `// This code is contributed by Nikita Tiwari. `

## Python

 `# An Optimized Solution to check Abundant Number ` `# in PYTHON ` `import` `math ` ` `  `# Function to calculate sum of divisors ` `def` `getSum(n) : ` `    ``sum` `=` `0` `     `  `    ``# Note that this loop runs till square root ` `    ``# of n ` `    ``i ``=` `1` `    ``while` `i <``=` `(math.sqrt(n)) : ` `        ``if` `n``%``i ``=``=` `0` `: ` `             `  `        ``# If divisors are equal,take only one ` `        ``# of them  ` `            ``if` `n``/``i ``=``=` `i : ` `                ``sum` `=` `sum` `+` `i ` `            ``else` `: ``# Otherwise take both ` `                ``sum` `=` `sum` `+` `i ` `                ``sum` `=` `sum` `+` `(n ``/` `i ) ` `        ``i ``=` `i ``+` `1` `     `  `    ``# calculate sum of all proper divisors only ` `    ``sum` `=` `sum` `-` `n ` `    ``return` `sum` ` `  `# Function to check Abundant Number ` `def` `checkAbundant(n) : ` `     `  `    ``# Return true if sum of divisors is greater ` `    ``# than n. ` `    ``if` `(getSum(n) > n) : ` `        ``return` `1` `    ``else` `: ` `        ``return` `0` `         `  `# Driver program to test above function */ ` `if``(checkAbundant(``12``) ``=``=` `1``) : ` `    ``print` `"YES"` `else` `: ` `    ``print` `"NO"` `     `  `if``(checkAbundant(``15``) ``=``=` `1``) : ` `    ``print` `"YES"` `else` `: ` `    ``print` `"NO"` `     `  `# This code is contributed by Nikita Tiwari. `

## C#

 `// An Optimized Solution to check Abundant Number ` `// in C# ` `// Function to calculate sum of divisors ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``// Function to calculate sum of divisors ` `    ``static` `int` `getSum(``int` `n) ` `    ``{ ` `        ``int` `sum = 0; ` ` `  `        ``// Note that this loop runs till square ` `        ``// root of n ` `        ``for` `(``int` `i = 1; i <= (Math.Sqrt(n)); i++) { ` `            ``if` `(n % i == 0) { ` `                 `  `                ``// If divisors are equal, take only ` `                ``// one of them ` `                ``if` `(n / i == i) ` `                    ``sum = sum + i; ` ` `  `                ``else` `// Otherwise take both ` `                ``{ ` `                    ``sum = sum + i; ` `                    ``sum = sum + (n / i); ` `                ``} ` `            ``} ` `        ``} ` ` `  `        ``// calculate sum of all proper divisors ` `        ``// only ` `        ``sum = sum - n; ` `        ``return` `sum; ` `    ``} ` ` `  `    ``// Function to check Abundant Number ` `    ``static` `bool` `checkAbundant(``int` `n) ` `    ``{ ` `         `  `        ``// Return true if sum of divisors is ` `        ``// greater than n. ` `        ``return` `(getSum(n) > n); ` `    ``} ` ` `  `    ``/* Driver program to test above function */` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``if` `(checkAbundant(12)) ` `            ``Console.WriteLine(``"YES"``); ` `        ``else` `            ``Console.WriteLine(``"NO"``); ` `             `  `        ``if` `(checkAbundant(15)) ` `            ``Console.WriteLine(``"YES"``); ` `        ``else` `            ``Console.WriteLine(``"NO"``); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m. `

## PHP

 ` ``\$n``); ` `} ` ` `  `// Driver Code ` `\$k` `= checkAbundant(12) ? ````"YES "``` `: ````"NO "````; ` `echo``(``\$k``); ` ` `  `\$k` `= checkAbundant(15) ? ````"YES "``` `: ````"NO "````; ` `echo``(``\$k``); ` ` `  `// This code is contributed by Ajit. ` `?> `

Output :

```YES
NO
```

Time Complexity: O(sqrt(n))
Auxiliary Space: O(1)

## tags:

Mathematical series Mathematical series