Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: leogtz en 13 Abril 2009, 09:09 am



Título: Algoritmo "Numeros perfectos" [Batch]
Publicado por: leogtz en 13 Abril 2009, 09:09 am

De Wikipedia, la enciclopedia libre
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.

Así, 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los siguientes números perfectos son 28, 496 y 8128.


Código
  1. @echo off
  2. :: Numeros perfectos, Leo Gutierrez R.
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. set /a "i=1"
  7. set /a "suma=0"
  8. set /a "operacion=0"
  9. :bucle
  10. if %i% equ %numero% (goto:end)
  11. set /a "operacion=%numero% %% %i%"
  12. if %operacion% equ 0 (set /a "suma+=%i%")
  13. set /a "i+=1"
  14. goto:bucle
  15. :end
  16. if %suma% equ %numero% (
  17. echo El numero es perfecto.
  18. ) else (
  19. echo El numero no es perfecto.
  20. )
  21. goto:eof
Salida:

Código:
C:\>code
Numero : 4
El numero no es perfecto.

C:\>code
Numero : 6
El numero es perfecto.

C:\>code
Numero : 20
El numero no es perfecto.

C:\>code
Numero : 28
El numero es perfecto.

C:\>code
Numero : 2000
El numero no es perfecto.

C:\>code
Numero : 496
El numero es perfecto.

C:\>496
"496" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\>


Título: Re: Algoritmo "Numeros perfectos"
Publicado por: SmartGenius en 13 Abril 2009, 20:49 pm
jeje...me hiciste caso y sacaste el algoritmo de los numeros perfectos  ;D ;D

Esta bien men, un saludo :D


Título: Re: Algoritmo "Numeros perfectos"
Publicado por: leogtz en 13 Abril 2009, 20:58 pm
Si, gracias por la idea, SMART.


Título: Re: Algoritmo "Numeros perfectos" [Batch]
Publicado por: leogtz en 20 Junio 2009, 21:11 pm
El mismo algoritmo un poco más optimizado:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. for /l %%_ in (1,1,%numero%) do (
  7. set /a "operacion=%numero%%%%%_"
  8. if !operacion! equ 0 (set /a "suma+=%%_")
  9. )
  10. set /a "suma-=numero"
  11. if %suma% equ %numero% (
  12. echo.%numero%, Numero perfecto.
  13. ) else (
  14. echo.%numero%, Numero no perfecto.
  15. )
  16. pause>nul
  17. exit /b 0