Números perfectos

De Ejercicios

Contenido

Enunciado

Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo. Así, 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3.

Realizar los siguientes apartados para el cálculo de números perfectos:

  1. Un subalgoritmo al que se le de un entero, y devuelva los divisores de dicho numero, así como el número de ellos.
  2. Un subalgoritmo que reciba como entradas un número, y devuelva VERDADERO si la suma de divisores es igual al número y FALSO en otro caso.
  3. Un algoritmo que devuelva los k primeros números perfectos, apoyándose en los módulos anteriores.

Soluciones

Diseño en pseudocódigo

Apartado 1

PROCEDIMIENTO DIVISORES(N, VAR VEC, VAR POS)
ENTRADAS:
   N: ENTERO  (NÚMERO PARA SACAR SUS DIVISORES, N > 0 )
SALIDAS:
   VEC: ARRAY (1..1000) DE ENTEROS   (VECTOR PARA ALMACENAR LOS DIVISORES)
   POS: ENTERO                       (NUMERO DE DIVISORES)
VARIABLES:
   DIVISOR, J: ENTEROS
INICIO
   DIVISOR <-- N – 1
   J <-- 1;
   MIENTRAS ( DIVISOR <> 0 ) HACER
      SI ((N MOD DIVISOR ) = 0) ENTONCES 
         VEC(J) <-- DIVISOR
         J <-- J + 1
      FIN_SI
      DIVISOR <-- DIVISOR-1
   FIN_MIENTRAS
   SI N = 1 ENTONCES 
      VEC(J) <-- 1
      J <-- J + 1
   FIN_SI
   POS<--J-1
FIN

Apartado 2

FUNCIÓN SUMADIVISORES(NUM): LÓGICO
ENTRADAS:
   NUM: ENTERO    (NÚMERO QUE ESTUDIAMOS PARA VER SI LA SUMA DE SUS DIVISORES ES IGUAL AL NÚMERO O NO, NUM > 0)
SALIDAS:
   RESULT: LÓGICO (VERDADERO SI LA SUMA DE LOS DIVISORES ES EL NUMERO Y FALSO SI NO LO ES)
VARIABLES:
   K, SUM, LONG : ENTEROS
   VECTOR:ARRAY (1..1000) DE ENTEROS
INICIO
   (Calcular divisores)
   DIVISORES(NUM, VECTOR, LONG)
   (Sumar los divisores)
   SUM <-- 0
   PARA K <-- 1 HASTA LONG HACER
      SUM <-- SUM + VECTOR(K)
   FIN_PARA
   (Comprobar si la suma de los divisores es igual al número)
   SI ( SUM = NUM ) ENTONCES
        RESULT <-- VERDADERO
   SINO
        RESULT <-- FALSO
   FIN_SI
   DEVOLVER RESULT
FIN

Apartado 3

PROCEDIMIENTO PERFECTO (TOPE, VAR DESTINO)
ENTRADAS:
   TOPE: ENTERO  (CANTIDAD DE NÚMEROS PERFECTOS QUE DEBEMOS ENCONTRAR)
SALIDAS:
   DESTINO: ARRAY (1..1000) DE ENTEROS  (VECTOR EN EL QUE ALMACENAMOS LOS NÚMEROS PERFECTOS)
VARIABLES:
   A, B: ENTEROS
INICIO
   A <-- 1
   B <-- 1
   MIENTRAS (B<=TOPE) HACER
      SI SUMADIVISORES(A) ENTONCES
               DESTINO(B)  <-- A
               B <-- B+1
      FIN_SI
      A <-- A + 1
   FIN_MIENTRAS
FIN
ALGORITMO NUMEROPERFECTO
ENTRADAS:
   P: ENTERO  (CANTIDAD DE NÚMEROS PERFECTOS HA ENCONTRAR, P > 0)
SALIDAS:
   SOLUCIÓN: ARRAY (1..1000) DE ENTEROS  (NÚMEROS PERFECTOS ENCONTRADOS) 
VARIABLES:
   I: ENTERO
INICIO
  ESCRIBIR "¿CUANTOS NÚMEROS PERFECTOS DESEA CALCULAR? : "
  LEER P
  PERFECTO(P, SOLUCION)
  ESCRIBIR "LOS ",P," Nº PERFECTOS SON: "
  PARA  I <-- 1  HASTA P HACER
     ESCRIBIR "  ", SOLUCION(I)
  FIN_PARA
FIN.
Tipos de soluciones