Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: leogtz en 14 Abril 2009, 04:56 am



Título: Algoritmo numeros primos [Batch]
Publicado por: leogtz en 14 Abril 2009, 04:56 am
Código
  1. @echo off
  2. :: Algoritmo de numeros primos, Leo Gutierrez R.
  3. :code
  4. set /p "numero=Numero : "
  5. if not defined numero (goto:code)
  6. set /a "contador=1"
  7. set /a "divisores=0"
  8. set /a "numero_=numero+1"
  9. set /a "suma=0"
  10. :bucle
  11. if %contador% equ %numero_% (goto:end)
  12. set /a "operacion=%numero% %% %contador%"
  13. if %operacion% equ 0 (
  14. set /a "divisores+=1"
  15. set /a "suma+=%contador%"
  16. )
  17. set /a "contador+=1"
  18. goto:bucle
  19. :end
  20. set /a "_=%numero%+1"
  21. if %suma% equ %_% (echo.Es primo) else (echo.No es primo)
  22. goto:eof

Salida:
Código:
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:\>


Título: Re: Algoritmo numeros primos [Batch]
Publicado por: SmartGenius en 14 Abril 2009, 05:20 am
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


Título: Re: Algoritmo numeros primos [Batch]
Publicado por: leogtz en 14 Abril 2009, 05:31 am
Podrias implementarlo completo ?.... :rolleyes:
Tal ves si, pero por ahora estoy ocupado con algunos problemas de la USACO.

Saludos.


Título: Re: Algoritmo numeros primos [Batch] [Actualizado]
Publicado por: leogtz en 15 Junio 2009, 05:14 am
Aqui esta el nuevo algoritmo, 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 "divisores+=1"
  9. )
  10. if %divisores% equ 2 (echo.Es primo) else (echo.No es primo)
  11. pause>nul
  12. exit /b 0

Salida:

Código:
C:\>code
Numero : 2
Es primo

C:\>code
Numero : 21
No es primo

C:\>code
Numero : 71
Es primo

C:\>


Título: Re: Algoritmo numeros primos [Batch]
Publicado por: SmartGenius en 15 Junio 2009, 20:44 pm
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
  1. @echo off
  2. ::Descomposicion En Factores Primos
  3. setlocal enabledelayedexpansion
  4.  
  5. Set /a "C=%1*1"
  6. If not %C% EQU %1 (Echo.No Ha Introducido un Numero..&Goto :Eof)
  7. If "%1"=="1" (Echo.1&Goto :Eof)
  8. Set Lim=%1
  9. for /l %%n in (1,1,%Lim%) do (
  10. call :EsPrimo %%n
  11. if "!Primo!"=="True" Call :DescPrimo %Lim% %%n
  12. )
  13. Echo.%Op:~1%
  14. Goto :Eof
  15.  
  16. :EsPrimo
  17. set divisores=
  18. set "numero=%1"
  19. for /l %%_ in (1,1,%numero%) do (
  20. set /a "operacion=%numero%%%%%_"
  21. if !operacion! equ 0 set /a "divisores+=1"
  22. )
  23. if %divisores% equ 2 (Set Primo=True) else (Set Primo=False)
  24. Goto :Eof
  25.  
  26. :DescPrimo
  27. Set Val=%1
  28. :Desc2
  29. Set Var=%Op%
  30. Set /a C=%Var:~1%
  31. If %C% GEQ %Lim% Goto :Eof
  32. Set /a Mod=(%Val%)%%(%2)
  33. If %Mod% EQU 0 set Op=%Op%*%2&Set /a Val=(%Val%)/(%2)&Goto :Desc2
  34. Goto :Eof

Saludos.  ::)