[RETO] Determinar Número Perfecto

Iniciado por Miseryk, 23 Octubre 2013, 11:44 AM

0 Miembros y 1 Visitante están viendo este tema.

Miseryk

Hola a todos, los invito a que programen a gusto si un número es perfecto o no.

Cómo funciona un número perfecto?

Un número es perfecto, cuando la SUMA de TODOS sus divisores, evadiendo a si mismo, es igual a ese número.

Ej:

6: 1+2+3 = 6
28: 1+2+4+7+14 = 28
etc

Lista:
6
28
496
8128
33550336
8589869056
137438691328
2305843008139952128

Valoro pensamientos/deducciones propias :D
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

ivancea96

No lo pillo.
Cita de: Miseryk en 23 Octubre 2013, 11:44 AM
los invito a que programen a gusto si un número es perfecto o no.
¿Si un número es perfecto o no? Los números perfectos, como bien explicaste, son los que cumplen esa condición.
¿Se trata de descubrir cuales de esos números no es erfecto o algo así?
xD

79137913

HOLA!!!

Hay que crear un verificador de numeros perfectos o un generador?

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Miseryk

A lo que me refiero es que el usuario ingrese un número en un textbox y al hacer click en un button le informe si el número ingresado es perfecto o no. :P
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

Mad Antrax

Es más divertido hacer un generador. Mola mucho programar funciones recursivas
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

79137913

#5
HOLA!!!

Que comience el reto!

Ejemplo de la funcion:
Código (vb) [Seleccionar]
Private Function IsPerfect(N as double) as Boolean

Si quieren hacer una funcion que devuelva el x numero perfecto aqui la funcion:
Código (vb) [Seleccionar]
Private Function GetPerfect(N as  Long) as double
y que devuelva el N numero perfecto de la lista!

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Slava_TZD

Ya contareis cuanto os tarda en comprobar el último número, lo acabo de hacer en Perl y lo cerré porque mi macTrasto se puso hirviendo.


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

79137913

HOLA!!!

Mi funcion puede verificar los numeros perfectos sin problema, probe con el ultimo que esta aca y lo verifica en menos de 0,1 ms .-

Para que vean que lo que importa es el algoritmo no el lenguaje ;)

Código (vb) [Seleccionar]
Private Function IsPerfect(N As Double) As Boolean
   Dim Sum As Double
   Dim Aux As Double
   Aux = N / 2
   Sum = 1 + Aux
   Do While Aux > 2
       If Fix(Aux / 2) < Aux / 2 Then
           Aux = Aux + 1
       End If
       Aux = Aux / 2
       Sum = Sum + Aux
   Loop
   IsPerfect = (N = Sum)
End Function


Superenme ;)

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Miseryk

#8
Mi código, con un par de deducciones que hice ;)

Código (vb) [Seleccionar]

Public Function IsPerfect(ByRef numero As Double) As Boolean
Dim loopc As Double
Dim calc As Double

Dim NumStr As String
Dim LastNum As Byte

NumStr = CStr(numero)
LastNum = CByte(Mid(NumStr, Len(NumStr), 1))

Dim Max As Variant

Max = Fix(CDbl(numero) / CDbl(2))

If LastNum = 6 Or LastNum = 8 Then
   For loopc = Max To 1 Step -1
       'If numero Mod loopc = 0 Then
       If numero Mod loopc = 0 Then
           calc = calc + loopc

           If calc > numero Then
               IsPerfect = False
               Exit Function
           End If
       End If
   Next loopc
End If

IsPerfect = (calc = numero)
End Function


Modificación.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

79137913

#9
HOLA!!!

Me parece o alguien tomo de base mi ejemplo funcion... :silbar: :silbar: :silbar: :silbar: :silbar:

P.D: tu funcion da OVERFLOW en esta linea cuando se inserta el numero 2305843008139952128 :
Código (vb) [Seleccionar]
       If numero Mod loopc = 0 Then

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*