Se dice que un número N es un número perfecto múltiple si N divide a sigma(N), donde sigma(N) = suma de todos los divisores de N .
Los primeros números multiplicados por perfectos son:
1, 6, 28, 120, 496, 672, ……..
Comprueba si N es un número multiplicado por perfecto
Dado un número N , la tarea es encontrar si este número es un número perfecto o no.
Ejemplos:
Entrada: N = 120
Salida: SÍ
Explicación:
La suma de los divisores de 120 es 1 + 2 + 3 + 4 + 5 + 6 + 8 + 10 + 12 + 15 + 20 + 24 + 30 + 40 + 60 + 120 = 360 y 120 divide 360.
Por lo tanto, 120 es un número multiplicado por perfecto.
Entrada: N = 32
Salida: No
Enfoque : para que un número N sea un número multiplicado por perfecto, la siguiente condición debe cumplirse: sigma(N) % N = 0 , donde sigma(N) = suma de todos los divisores de N . Por lo tanto, encontraremos la suma de todos los divisores de N y comprobaremos si es divisible por N o no. Si es divisible, escriba «Sí» , de lo contrario, escriba «No» .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; // Function to find the // sum of divisors int 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; // Otherwise take both else { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Multiply-perfect number bool MultiplyPerfectNumber(int n) { if (getSum(n) % n == 0) return true; else return false; } // Driver code int main() { int n = 28; if (MultiplyPerfectNumber(n)) { cout << "Yes"; } else { cout << "No"; } return 0; }
Java
// Java implementation of the above approach class GFG{ // Function to find the // 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; // Otherwise take both else { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Multiply-perfect number static boolean MultiplyPerfectNumber(int n) { if (getSum(n) % n == 0) return true; else return false; } // Driver code public static void main(String[] args) { int n = 28; if (MultiplyPerfectNumber(n)) { System.out.print("Yes"); } else { System.out.print("No"); } } } // This code is contributed by Ritik Bansal
Python3
# Python3 implementation of the above approach import math # Function to find the # sum of divisors def getSum(n): sum1 = 0; # Note that this loop # runs till square root of N for i in range(1, int(math.sqrt(n))): if (n % i == 0): # If divisors are equal, # take only one of them if (n // i == i): sum1 = sum1 + i; # Otherwise take both else: sum1 = sum1 + i; sum1 = sum1 + (n // i); return sum1; # Function to check Multiply-perfect number def MultiplyPerfectNumber(n): if (getSum(n) % n == 0): return True; else: return False; # Driver code n = 28; if (MultiplyPerfectNumber(n)): print("Yes"); else: print("No"); # This code is contributed by Code_Mech
C#
// C# implementation of the above approach using System; class GFG{ // Function to find the // 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; // Otherwise take both else { sum = sum + i; sum = sum + (n / i); } } } return sum; } // Function to check Multiply-perfect number static bool MultiplyPerfectNumber(int n) { if (getSum(n) % n == 0) return true; else return false; } // Driver code public static void Main() { int n = 28; if (MultiplyPerfectNumber(n)) { Console.Write("Yes"); } else { Console.Write("No"); } } } // This code is contributed by Code_Mech
Javascript
<script> // Javascript implementation of the above approach // Function to find the // sum of divisors function getSum( n) { let sum = 0; // Note that this loop // runs till square root of N for ( 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); } } } return sum; } // Function to check Multiply-perfect number function MultiplyPerfectNumber( n) { if (getSum(n) % n == 0) return true; else return false; } // Driver code let n = 28; if (MultiplyPerfectNumber(n)) { document.write("Yes"); } else { document.write("No"); } // This code is contributed by Rajput-Ji </script>
Yes
Complejidad de tiempo: O(N 1/2 )
Espacio Auxiliar: O(1)
Referencias: https://en.wikipedia.org/wiki/Multiply_perfect_number