A number n is said to be Deficient Number if sum of all the divisors of the number denoted by divisorsSum(n) is less than twice the value of the number n. And the difference between these two values is called the deficiency.
Mathematically, if below condition holds the number is said to be Deficient:
divisorsSum(n) < 2 * n
deficiency = (2 * n) - divisorsSum(n)
The first few Deficient Numbers are:
1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19 …..
Given a number n, our task is to find if this number is Deficient number or not.
Examples :
Input: 21
Output: YES
Divisors are 1, 3, 7 and 21. Sum of divisors is 32.
This sum is less than 2*21 or 42.
Input: 12
Output: NO
Input: 17
Output: YES
A Simple solution is to iterate all the numbers from 1 to n and check if the number divides n and calculate the sum. Check if this sum is less than 2 * 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.
Implementation of Optimized approach
C++
#include <bits/stdc++.h>
using namespace std;
int divisorsSum( int n)
{
int sum = 0;
for ( int i = 1; i <= sqrt (n); i++) {
if (n % i == 0) {
if (n / i == i) {
sum = sum + i;
}
else
{
sum = sum + i;
sum = sum + (n / i);
}
}
}
return sum;
}
bool isDeficient( int n)
{
return (divisorsSum(n) < (2 * n));
}
int main()
{
isDeficient(12) ? cout << "YES\n" : cout << "NO\n" ;
isDeficient(15) ? cout << "YES\n" : cout << "NO\n" ;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int divisorsSum( int n)
{
int sum = 0 ;
for ( int i = 1 ; i <= (Math.sqrt(n)); i++) {
if (n % i == 0 ) {
if (n / i == i) {
sum = sum + i;
}
else
{
sum = sum + i;
sum = sum + (n / i);
}
}
}
return sum;
}
static boolean isDeficient( int n)
{
return (divisorsSum(n) < ( 2 * n));
}
public static void main(String args[])
{
if (isDeficient( 12 ))
System.out.println( "YES" );
else
System.out.println( "NO" );
if (isDeficient( 15 ))
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
Python3
import math
def divisorsSum(n) :
sum = 0
i = 1
while i< = math.sqrt(n) :
if (n % i = = 0 ) :
if (n / / i = = i) :
sum = sum + i
else :
sum = sum + i;
sum = sum + (n / / i)
i = i + 1
return sum
def isDeficient(n) :
return (divisorsSum(n) < ( 2 * n))
if ( isDeficient( 12 ) ):
print ( "YES" )
else :
print ( "NO" )
if ( isDeficient( 15 ) ) :
print ( "YES" )
else :
print ( "NO" )
|
C#
using System;
class GFG {
static int divisorsSum( int n)
{
int sum = 0;
for ( int i = 1; i <= (Math.Sqrt(n)); i++) {
if (n % i == 0) {
if (n / i == i) {
sum = sum + i;
}
else
{
sum = sum + i;
sum = sum + (n / i);
}
}
}
return sum;
}
static bool isDeficient( int n)
{
return (divisorsSum(n) < (2 * n));
}
public static void Main()
{
string var = isDeficient(12) ? "YES" : "NO" ;
Console.WriteLine( var );
string var1 = isDeficient(15) ? "YES" : "NO" ;
Console.WriteLine(var1);
}
}
|
PHP
<?php
function divisorsSum( $n )
{
$sum = 0;
for ( $i = 1; $i <= sqrt( $n ); $i ++)
{
if ( $n % $i ==0)
{
if ( $n / $i == $i )
{
$sum = $sum + $i ;
}
else
{
$sum = $sum + $i ;
$sum = $sum + ( $n / $i );
}
}
}
return $sum ;
}
function isDeficient( $n )
{
return (divisorsSum( $n ) < (2 * $n ));
}
$ds = isDeficient(12) ?
"YES\n" :
"NO\n" ;
echo ( $ds );
$ds = isDeficient(15) ?
"YES\n" :
"NO\n" ;
echo ( $ds );
?>
|
Javascript
<script>
function divisorsSum(n)
{
let sum = 0;
for (let i = 1; i <= (Math.sqrt(n)); i++)
{
if (n % i == 0)
{
if (n / i == i) {
sum = sum + i;
}
else
{
sum = sum + i;
sum = sum + (n / i);
}
}
}
return sum;
}
function isDeficient(n)
{
return (divisorsSum(n) < (2 * n));
}
if (isDeficient(12))
document.write( "YES" + "<br/>" );
else
document.write( "NO" + "<br/>" );
if (isDeficient(15))
document.write( "YES" + "<br/>" );
else
document.write( "NO" + "<br/>" );
</script>
|
Output :
NO
YES
Time Complexity : O( sqrt( n ))
Auxiliary Space : O( 1 )
References :
https://en.wikipedia.org/wiki/Deficient_number
Last Updated :
11 Sep, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...