Algoritmo numeros primos [Batch]

Iniciado por leogtz, 14 Abril 2009, 04:56 AM

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

leogtz

Código (dos) [Seleccionar]
@echo off
:: Algoritmo de numeros primos, Leo Gutierrez R.
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
set /a "contador=1"
set /a "divisores=0"
set /a "numero_=numero+1"
set /a "suma=0"
:bucle
if %contador% equ %numero_% (goto:end)
set /a "operacion=%numero% %% %contador%"
if %operacion% equ 0 (
set /a "divisores+=1"
set /a "suma+=%contador%"
)
set /a "contador+=1"
goto:bucle
:end
set /a "_=%numero%+1"
if %suma% equ %_% (echo.Es primo) else (echo.No es primo)
goto:eof


Salida:

C:\>code
Numero : 2
Es primo

C:\>code
Numero : 4
No es primo

C:\>code
Numero : 19
Es primo

C:\>code
Numero : 23
Es primo

C:\>code
Numero : 3
Es primo

C:\>code
Numero : 5
Es primo

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SmartGenius

Jeje..muy bien  :D

Podrias implementarlo completo ?.... :rolleyes:

http://foro.elhacker.net/scripting/batch_algoritmo_de_numeros_primos-t235233.0.html

Saludos.

PD: Que conste que me dijiste que respondiera en todos  :xD


leogtz

#2
Cita de: :: SmartGenius :: en 14 Abril 2009, 05:20 AM
Podrias implementarlo completo ?.... :rolleyes:
Tal ves si, pero por ahora estoy ocupado con algunos problemas de la USACO.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

Aqui esta el nuevo algoritmo, 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 "divisores+=1"
)
if %divisores% equ 2 (echo.Es primo) else (echo.No es primo)
pause>nul
exit /b 0


Salida:

C:\>code
Numero : 2
Es primo

C:\>code
Numero : 21
No es primo

C:\>code
Numero : 71
Es primo

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SmartGenius

Muy Bueno Brother, la Implementacion del FOR lo deja aun mas optimizado...

http://es.wikipedia.org/wiki/N%C3%BAmero_primo

Con esto me he dado cuenta que mi codigo estaba errado al tomar el 1 como primo, pues no lo es aunque su regla se aplique.  ;D

Ahora, para descomponer un numero en sus factores primos.

Código (dos) [Seleccionar]
@echo off
::Descomposicion En Factores Primos
setlocal enabledelayedexpansion

Set /a "C=%1*1"
If not %C% EQU %1 (Echo.No Ha Introducido un Numero..&Goto :Eof)
If "%1"=="1" (Echo.1&Goto :Eof)
Set Lim=%1
for /l %%n in (1,1,%Lim%) do (
call :EsPrimo %%n
if "!Primo!"=="True" Call :DescPrimo %Lim% %%n
)
Echo.%Op:~1%
Goto :Eof

:EsPrimo
set divisores=
set "numero=%1"
for /l %%_ in (1,1,%numero%) do (
set /a "operacion=%numero%%%%%_"
if !operacion! equ 0 set /a "divisores+=1"
)
if %divisores% equ 2 (Set Primo=True) else (Set Primo=False)
Goto :Eof

:DescPrimo
Set Val=%1
:Desc2
Set Var=%Op%
Set /a C=%Var:~1%
If %C% GEQ %Lim% Goto :Eof
Set /a Mod=(%Val%)%%(%2)
If %Mod% EQU 0 set Op=%Op%*%2&Set /a Val=(%Val%)/(%2)&Goto :Desc2
Goto :Eof


Saludos.  ::)