Un número es un número perfecto si es igual a la suma de sus divisores propios, es decir, la suma de sus divisores positivos excluyendo el propio número. Escribe una función para verificar si un número dado es perfecto o no.
Ejemplos:
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.
Una solución simple es pasar por todos los números del 1 al n-1 y verificar si es un divisor. Mantener la suma de todos los divisores. Si la suma se vuelve igual a n, entonces devuelve verdadero, de lo contrario, devuelve falso.
Una solución eficiente es recorrer números hasta la raíz cuadrada de n. Si un número ‘i’ divide a n, suma tanto ‘i’ como n/i a la suma.
A continuación se muestra la implementación de la solución eficiente.
C++
// C++ program to check if a given number is perfect // or not #include<iostream> 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
<?php // PHP program to check if a given number // is perfect or not // Returns true if n is perfect function isPerfect($n) { // To store sum of divisors $sum = 1; // Find all divisors and add them for ($i = 2; $i * $i <= $n; $i++) { if ($n % $i == 0) { if($i * $i != $n) $sum = $sum + $i + (int)($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 Code echo "Below are all perfect numbers till 10000\n"; for ($n = 2; $n < 10000; $n++) if (isPerfect($n)) echo "$n is a perfect number\n"; // This code is contributed by mits ?>
Javascript
<script> // Javascript program to check if a given number is perfect // or not // Returns true if n is perfect function isPerfect(n) { // To store sum of divisors sum = 1; // Find all divisors and add them for (let 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 document.write("Below are all perfect numbers till 10000" + "<br>"); for (let n =2; n<10000; n++) if (isPerfect(n)) document.write(n + " is a perfect number" + "<br>"); // This code is contributed by Mayank Tyagi </script>
Producción:
Below are all perfect numbers till 10000 6 is a perfect number 28 is a perfect number 496 is a perfect number 8128 is a perfect number
Complejidad del tiempo: O(√n)
Espacio auxiliar: O(1)
A continuación se presentan algunos datos interesantes sobre los números perfectos:
1) Todo número par perfecto tiene la forma 2 p ?1 (2 p ? 1) donde 2 p ? 1 es primo.
2) Se desconoce si existen números perfectos impares.
Referencias:
https://en.wikipedia.org/wiki/Perfect_number
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA