Se dice que un número es un número perfecto si la suma de sus divisores propios (es decir, todos los divisores positivos excepto el propio número) es igual a ese número. La suma alícuota es la suma de los divisores de un número, excluyendo el número en sí. Por lo tanto, un número es un número perfecto solo si es igual a su suma alícuota. Todos los números perfectos conocidos son pares .
Example 1: n = 9 Proper Divisors of 9 are 1 and 3. Sum = 1+3 = 4 ≠ 9 ⇒ 9 is not a perfect number. Example 2: n = 6 Proper Divisors of 6 are 1, 2 and 3. Sum = 1+2+3 = 6 = 6 ⇒ 6 is a perfect number. Example 3: n = 28 Proper Divisors of 28 are 1, 2, 4, 7 and 14. Sum = 1+2+4+7+14 = 28 = 28 ⇒ 28 is a perfect number. Example 4: n = 15 Proper Divisors of 15 are 1,3 and 5. Sum = 1+3+5 = 9 ≠ 15 ⇒ 15 is not a perfect number.
Entonces, básicamente tenemos que encontrar la suma de los divisores propios de un número.
Enfoque 1:
Una solución simple es pasar por cada número del 1 al n-1 y verificar si es un divisor y si lo es, luego agregarlo en la variable de suma y al final verificar si la suma es igual al número en sí, entonces es un número perfecto de lo contrario no.
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) { // 1 is not a perfect number if (n == 1) return false; // sum will store the sum of proper divisors // As 1 is a proper divisor for all numbers // initialised sum with 1 int sum = 1; // Looping through the numbers to check if they are // divisors or not for (int i = 2; i < n; i++) { if (n % i == 0) { sum += i; } } // If sum of divisors is equal to // n, then n is a perfect number if (sum == n) return true; return false; } // Driver program public static void main(String[] args) { int n = 6; // Call isPerfect function to // check if the number is perfect or not. if (isPerfect(n)) System.out.println(n + " is a perfect number"); else System.out.println( n + " is not a perfect number"); } }
6 is a perfect number
- Complejidad de tiempo: O(n)
Enfoque 2:
Una Solución Eficiente es recorrer los números hasta la raíz cuadrada de n.
Si i es un divisor, entonces n/i también es un divisor.
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) { // 1 is not a perfect number if (n == 1) return false; // sum will store the sum of proper divisors // As 1 is a proper divisor for all numbers // initialised sum with 1 int sum = 1; // Looping through the numbers to check if they are // divisors or not for (int i = 2; i * i <= n; i++) { if (n % i == 0) { // n is a perfect square // let's take 25 // we need to add 5 only once // sum += i + n / i will add it twice if (i * i == n) sum += i; else sum += i + (n / i); } } // If sum of divisors is equal to // n, then n is a perfect number if (sum == n) return true; return false; } // Driver program public static void main(String[] args) { int n = 6; // Call isPerfect function to // check if the number is perfect or not. if (isPerfect(n)) System.out.println(n + " is a perfect number"); else System.out.println( n + " is not a perfect number"); } }
6 is a perfect number
Complejidad del tiempo: O(√n)
Publicación traducida automáticamente
Artículo escrito por rathoreatul27 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA