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.
@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:\>
jeje...me hiciste caso y sacaste el algoritmo de los numeros perfectos ;D ;D
Esta bien men, un saludo :D
Si, gracias por la idea, SMART.
El mismo algoritmo un poco más optimizado:
@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