Test Foro de elhacker.net SMF 2.1

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 (dos) [Seleccionar]
@echo off
:: Numeros perfectos, Leo Gutierrez R.
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
set /a "i=1"
set /a "suma=0"
set /a "operacion=0"
:bucle
if %i% equ %numero% (goto:end)
set /a "operacion=%numero% %% %i%"
if %operacion% equ 0 (set /a "suma+=%i%")
set /a "i+=1"
goto:bucle
:end
if %suma% equ %numero% (
echo El numero es perfecto.
) else (
echo El numero no es perfecto.
)
goto:eof

Salida:


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 (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
for /l %%_ in (1,1,%numero%) do (
set /a "operacion=%numero%%%%%_"
if !operacion! equ 0 (set /a "suma+=%%_")
)
set /a "suma-=numero"
if %suma% equ %numero% (
echo.%numero%, Numero perfecto.
) else (
echo.%numero%, Numero no perfecto.
)
pause>nul
exit /b 0