Hablaremos hoy de un tema curioso, de los Números perfectos.
Si leemos algo más sobre estos números en Wikipedia (aquí), comprenderemos rápidamente en qué consiste.
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.
Así pues la clave del asunto, para obtener o conocer si un número es perfecto, es poder recuperar un listado de los divisores de cualquier número natural...
Generamos una serie de enteros desde 2 hasta 500 en las celdas B2:B500, e insertaremos la función personalizada en VB que veremos a continuación en el rango continuo C2:C500...
Insertaremos la siguiente función personalizada en un módulo estándar:
Lo que logramos con esta función es determinar, a partir de un número, cuáles son sus divisores... evaluando si además, la suma de estos divisores coincide con el valor origen (condición para que sea Número Perfecto)...
Para su fácil evaluación hemos incluido el listado de los divisores que corresponden a estos 'Números perfectos'
Si comprobamos los tres incluidos en el rango de 2 a 500:
6 Número Perfecto=1+2+3
28 Número Perfecto=1+2+4+7+14
496 Número Perfecto=1+2+4+8+16+31+62+124+248
verás que coinciden con el listado descubierto por Euclides.. el siguiente Número perfecto es 8128.. por si te interesa comprobarlo ;-)
Además, y como curiosidad añadida, si el único divisor de un número es 1, sabremos que éste es un número primo ver esta otra entrada del blog).
Son bastantes peculiares estos números y aún parecen tener bastantes cosas por demostrar...
Si leemos algo más sobre estos números en Wikipedia (aquí), comprenderemos rápidamente en qué consiste.
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.
Así pues la clave del asunto, para obtener o conocer si un número es perfecto, es poder recuperar un listado de los divisores de cualquier número natural...
Generamos una serie de enteros desde 2 hasta 500 en las celdas B2:B500, e insertaremos la función personalizada en VB que veremos a continuación en el rango continuo C2:C500...
Insertaremos la siguiente función personalizada en un módulo estándar:
Function DivisoresFx(x As Integer) Application.Volatile Dim i As Integer, acum As Long acum = 0 'recorremos en descendente todos los números inferiores al Valor buscado 'por eso empezamos en x-1 For i = (x - 1) To 1 Step -1 'comprobamos es divisible 'esto es, es un divisor... If x Mod i = 0 Then 'en ese caso acumulamos/sumamos a los divisores previos... acum = acum + i txt = i & "+" & txt End If Next i 'devolvemos valor a lal función en la hoja de cálculo If acum = x Then 'si cumple la condición de número perfecto ' es un número natural que es igual a la suma de sus divisores propios positivos. DivisoresFx = "Número Perfecto" & "-" & Left(txt, Len(txt) - 1) ElseIf acum = 1 Then 'si cumple la condicío de primo 'se divisible solo por si mismo y por uno DivisoresFx = "Primo" Else 'resto de números... DivisoresFx = "-" End If End Function
Lo que logramos con esta función es determinar, a partir de un número, cuáles son sus divisores... evaluando si además, la suma de estos divisores coincide con el valor origen (condición para que sea Número Perfecto)...
Para su fácil evaluación hemos incluido el listado de los divisores que corresponden a estos 'Números perfectos'
Si comprobamos los tres incluidos en el rango de 2 a 500:
6 Número Perfecto=1+2+3
28 Número Perfecto=1+2+4+7+14
496 Número Perfecto=1+2+4+8+16+31+62+124+248
verás que coinciden con el listado descubierto por Euclides.. el siguiente Número perfecto es 8128.. por si te interesa comprobarlo ;-)
Además, y como curiosidad añadida, si el único divisor de un número es 1, sabremos que éste es un número primo ver esta otra entrada del blog).
Son bastantes peculiares estos números y aún parecen tener bastantes cosas por demostrar...
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.