logo

Deficiënt nummer

Probeer het eens op GfG Practice ' title= #practiceLinkDiv {weergave: geen! belangrijk; }

Van een getal n wordt gezegd dat het een ontoereikend getal is als het de som is van alle delers van het getal aangegeven met delersSom(n) is minder dan tweemaal de waarde van het getal n. En het verschil tussen deze twee waarden wordt de tekort .
Wiskundig gezien, als de onderstaande voorwaarde geldt, wordt gezegd dat het getal ontoereikend is: 
 

  divisorsSum(n) < 2 * n     deficiency   = (2 * n) - divisorsSum(n)


De eerste paar gebrekkige nummers zijn:
1 2 3 4 5 7 8 9 10 11 13 14 15 16 17 19 .....
Gegeven een getal n is het onze taak om uit te zoeken of dit getal een Deficiënt getal is of niet. 
Voorbeelden:  
 

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


 



Aanbevolen praktijk Deficiënt nummer Probeer het!


A Eenvoudige oplossing is om alle getallen van 1 tot n te herhalen en te controleren of het getal n deelt en de som te berekenen. Controleer of deze som kleiner is dan 2 * n of niet.
Tijdcomplexiteit van deze aanpak: O ( n )
Geoptimaliseerde oplossing:  
Als we goed kijken, zijn de delers van het getal n paarsgewijs aanwezig. Als n = 100 bijvoorbeeld zijn alle paren delers: (1 100) (2 50) (4 25) (5 20) (10 10)
Door dit feit te gebruiken, kunnen we ons programma versnellen. 
Bij het controleren van delers zullen we voorzichtig moeten zijn als er twee gelijke delers zijn, zoals in het geval van (10 10). In dat geval nemen we slechts één ervan mee bij de berekening van de som.
Implementatie van een geoptimaliseerde aanpak 
 

C++
// C++ program to implement an Optimized Solution // to check Deficient Number #include    using namespace std; // Function to calculate sum of divisors int divisorsSum(int n) {  int sum = 0; // Initialize sum of prime factors  // 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);  }  }  }  return sum; } // Function to check Deficient Number bool isDeficient(int n) {  // Check if sum(n) < 2 * n  return (divisorsSum(n) < (2 * n)); } /* Driver program to test above function */ int main() {  isDeficient(12) ? cout << 'YESn' : cout << 'NOn';  isDeficient(15) ? cout << 'YESn' : cout << 'NOn';  return 0; } 
Java
// Java program to check Deficient Number import java.io.*; class GFG {  // Function to calculate sum of divisors  static int divisorsSum(int n)  {  int sum = 0; // Initialize sum of prime factors  // 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);  }  }  }  return sum;  }  // Function to check Deficient Number  static boolean isDeficient(int n)  {  // Check if sum(n) < 2 * n  return (divisorsSum(n) < (2 * n));  }  /* Driver program to test above function */  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');  } } // This code is contributed by Nikita Tiwari 
Python3
# Python program to implement an Optimized  # Solution to check Deficient Number import math # Function to calculate sum of divisors def divisorsSum(n) : sum = 0 # Initialize sum of prime factors # 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 return sum # Function to check Deficient Number def isDeficient(n) : # Check if sum(n) < 2 * n return (divisorsSum(n) < (2 * n)) # Driver program to test above function  if ( isDeficient(12) ): print ('YES') else : print ('NO') if ( isDeficient(15) ) : print ('YES') else : print ('NO') # This Code is contributed by Nikita Tiwari 
C#
// C# program to implement an Optimized Solution // to check Deficient Number using System; class GFG {  // Function to calculate sum of  // divisors  static int divisorsSum(int n)  {  // Initialize sum of prime factors  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);  }  }  }  return sum;  }  // Function to check Deficient Number  static bool isDeficient(int n)  {  // Check if sum(n) < 2 * n  return (divisorsSum(n) < (2 * n));  }  /* Driver program to test above function */  public static void Main()  {  string var = isDeficient(12) ? 'YES' : 'NO';  Console.WriteLine(var);  string var1 = isDeficient(15) ? 'YES' : 'NO';  Console.WriteLine(var1);  } } // This code is contributed by vt_m 
PHP
 // PHP program to implement  // an Optimized Solution // to check Deficient Number // Function to calculate // sum of divisors function divisorsSum($n) { // Initialize sum of // prime factors $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); } } } return $sum; } // Function to check // Deficient Number function isDeficient($n) { // Check if sum(n) < 2 * n return (divisorsSum($n) < (2 * $n)); } // Driver Code $ds = isDeficient(12) ? 'YESn' : 'NOn'; echo($ds); $ds = isDeficient(15) ? 'YESn' : 'NOn'; echo($ds); // This code is contributed by ajit;. ?> 
JavaScript
<script> // Javascript program to check Deficient Number  // Function to calculate sum of divisors  function divisorsSum(n)  {  let sum = 0; // Initialize sum of prime factors    // 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;  }  else // Otherwise take both  {  sum = sum + i;  sum = sum + (n / i);  }  }  }    return sum;  }    // Function to check Deficient Number  function isDeficient(n)  {    // Check if sum(n) < 2 * n  return (divisorsSum(n) < (2 * n));  } // Driver code to test above methods  if (isDeficient(12))  document.write('YES' + '  
'
); else document.write('NO' + '
'
); if (isDeficient(15)) document.write('YES' + '
'
); else document.write('NO' + '
'
); // This code is contributed by avijitmondal1998. </script>

Uitgang:  
 

NO YES


Tijdcomplexiteit: O( sqrt( n )) 
Hulpruimte: O(1)
Referenties: 
https://en.wikipedia.org/wiki/Deficiënt_nummer