1: /// <summary>
2: /// Un número entero se dice que se trata de un número perfecto si sus factores,
3: /// incluyendo a 1 (pero excluyendo en el número mismo), suman igual que el número.
4: /// Por ejemplo, 6 es un número perfecto porque 6 = 1+2+3.
5: /// Escriba una función perfect que determine si el parámetro number es un número
6: /// perfecto. Utilice esta función en un programa que determine e imprima todos los
7: /// números perfectos entre 1 y 1000.
8: /// Imprima los factores de cada número perfecto para confirmar que el numero de verdad
9: /// es perfecto.Ponga en acción la potencia de su computadora para probar números más
10: /// grandes que 1000
11: /// </summary>
12: private static void Ejercicio3()
13: {
14: Console.Clear();
15: Console.WriteLine("Laboratorio 4 - Ejercicio 3");
16:
17: for (int i = 1; i <= 10000; ++i)
18: {
19: if (Perfect(i))
20: MostrarDivisores(i);
21: }
22: Console.ReadKey();
23: }
24: /// <summary>
25: /// Determina si un número es perfecto, un numero es perfecto
26: /// si el número es igual a la suma de sus divisores excluyendo
27: /// el mismo número. Ejemplo 6 = 1 + 2 + 3
28: /// </summary>
29: /// <param name="number">Número a controlar</param>
30: /// <returns>Verdadero si el número es perfecto</returns>
31: private static bool Perfect(int number)
32: {
33: if (number < 1)
34: return false;
35: int sum = 0;
36: for (int i = 1; i <= (number / 2); ++i)
37: {
38: if ((number % i) == 0)
39: sum += i;
40: }
41: return number == sum;
42: }
43:
44: /// <summary>
45: /// Muestra los divisores de un número y determina si el número
46: /// es perfecto.
47: /// </summary>
48: /// <param name="number">Número a controlar</param>
49: private static void MostrarDivisores(int number)
50: {
51: if (number < 1)
52: return;
53: int sum = 0;
54: Console.Write("Divisores de {0,8} :", number);
55: for (int i = 1; i <= (number / 2); ++i)
56: {
57: if ((number % i) == 0)
58: {
59: Console.Write(" {0} ", i);
60: sum += i;
61: }
62: }
63: if (number == sum)
64: Console.WriteLine("Es perfecto");
65: else
66: Console.WriteLine("NO ES perfecto");
67: }