Abundant Number - GeeksforGeeks

24 Jan, 2022
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
 
 
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++
Java
Python3
C#
PHP
Javascript
// An Optimized Solution to check Abundant Number#include <bits/stdc++.h>using namespace std; // Function to calculate sum of divisorsint 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 Numberbool 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\n" : cout << "NO\n";    checkAbundant(15)? cout << "YES\n" : cout << "NO\n";    return 0;}
// An Optimized Solution to check Abundant Number// in JAVAimport java.io.*;import java.math.*; // Function to calculate sum of divisorsclass 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.
# An Optimized Solution to check Abundant Number# in PYTHONimport math # Function to calculate sum of divisorsdef 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 Numberdef 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.
// An Optimized Solution to check Abundant Number// in C#// Function to calculate sum of divisorsusing 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// PHP program for an Optimized// solution to check Abundant Number // Function to calculate// sum of divisorsfunction getSum($n){    $sum = 0;     // Note that this loop runs    // till square root of n    for ($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;             // Otherwise take both            else            {                $sum = $sum + $i;                $sum = $sum + ($n / $i);            }        }    }     // calculate sum of all    // proper divisors only    $sum = $sum - $n;    return $sum;} // Function to check Abundant Numberfunction checkAbundant($n){    // Return true if sum of    // divisors is greater than n.    return (getSum($n) > $n);} // Driver Code$k = checkAbundant(12) ? "YES\n" : "NO\n";echo($k); $k = checkAbundant(15) ? "YES\n" : "NO\n";echo($k); // This code is contributed by Ajit.?>
<script>// Javascript program for an Optimized// solution to check Abundant Number // Function to calculate// sum of divisorsfunction getSum(n){    let sum = 0;     // Note that this loop runs    // till square root of n    for (let 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;             // Otherwise take both            else            {                sum = sum + i;                sum = sum + (n / i);            }        }    }     // calculate sum of all    // proper divisors only    sum = sum - n;    return sum;} // Function to check Abundant Numberfunction checkAbundant(n){    // Return true if sum of    // divisors is greater than n.    return (getSum(n) > n);} // Driver Codelet k = checkAbundant(12) ? "YES<br>" : "NO<br>";document.write(k); k = checkAbundant(15) ? "YES<br>" : "NO<br>";document.write(k); // This code is contributed by _saurabh_jaiswal</script>
Output :  
YES
NO
Time Complexity: O(sqrt(n)) Auxiliary Space: O(1)References: https://en.wikipedia.org/wiki/Abundant_numberThis article is contributed by Harsh Agarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.-Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.” 
jit_t
_saurabh_jaiswal
amartyaghoshgfg
series
Mathematical
Mathematical
series
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program to find sum of elements in a given array
Program for factorial of a number
Operators in C / C++
Euclidean algorithms (Basic and Extended)
The Knight's tour problem | Backtracking-1
Efficient program to print all prime factors of a given number
Find minimum number of coins that make a given value