Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: kraszic en 9 Julio 2008, 23:15 pm



Título: [batch] Problema extraño
Publicado por: kraszic en 9 Julio 2008, 23:15 pm
Buenas, el otro dia me decidi a hacer un programa q saque todos los numeros primos desde el 0 hasta el 10000 o los q quisiera y q aparte hiciera mas cosas.
Para empezar, hice un codigo q instalara todos los numeros del 0 hasta 10000 en un archivo.txt. Todo funciona bien pero cuando llega sobre el valor 300 el programa se cierra misteriosamente.

Lo abri con la cmd y me sale este error:
(http://img521.imageshack.us/img521/8550/dibujotz6.gif)


Este es el codigo del programa:
Código
  1. echo Se instalaran todos los numeros primos hasta 10000.
  2. echo Espere mientras se instalan los numeros.
  3. echo Al final aparecera un mensaje.
  4. echo LISTA DE NUMEROS PRIMOS >primos.txt
  5. echo. >>primos.txt
  6. echo 2 >>primos.txt
  7. echo 3 >>primos.txt
  8.  
  9. set num=4
  10. :inicio
  11. set num2=1
  12. set /a num=%num%+1
  13. if %num%==10000 goto acaba
  14. :inicio2
  15. set /a num2=%num2%+1
  16.  
  17. for /f "tokens=1 skip=%num2%" %%a in (primos.txt) do call :func %%a
  18. :func
  19. set cru=%1
  20. set /a pro1=%num%/%cru%
  21. set /a res=%num%-(%cru%*pro1)
  22. if %res%==0 goto inicio
  23. if %cru% GTR %pro1% goto fuera
  24. goto inicio2
  25.  
  26. :fuera
  27. echo %num% >>primos.txt
  28. goto inicio
  29.  
  30. :acaba
  31. echo Instalado
  32. pause>nul

Bueno, por si alguien no lo sabe, el procedimiento q he tomado para calcular si un numero es primo, es dividir el numero en cuestion por todos los numeros primos empezando por el 2, cuando el divisor (numero primo) es mayor q el quociente, ese numero es primo.

A ver, si alguien entiende el error y si se puede hacer algo para q no pase esto.

saludos


Título: Re: [batch] Problema extraño
Publicado por: carlitos.dll en 10 Julio 2008, 00:44 am
[Modificado] Dejo el code actualizado más abajo.


Título: Re: [batch] Problema extraño
Publicado por: kraszic en 10 Julio 2008, 01:10 am
Bueno, al final no se porq me empeñe tanto con lo del for para q cogiera los numeros primos...
Igualmente, si cogemos todos los numeros, el programa funciona bastante rapido, asi q lo dejere asi.

La modificacion q he hecho es en vez de ir de uno en uno, coger un numero impar e ir de dos en dos ya que todos los numeros pares no son primos.

saludos


Título: Re: [batch] Problema extraño
Publicado por: carlitos.dll en 10 Julio 2008, 01:16 am
buen dato kraszic, es decir solo el dos es par y es primo, y con el dato que diste se puede hacer el cálculo mucho más rápido. Ahora leí que los que terminan en 5, y son mayores que 5, son múltiplos de 5, así es que no son primos.

Aquí modifiqué el code, para que quedara más rápido.

Código:
::CarlitoS.dll
::Graba en archivo numeros primos

@echo off

set /a inicio=2
set /a fin=10000

if %inicio% LEQ 2 (set /a inicio=3 & call :divi 2)
for /l %%n in (%inicio%,2,%fin%) do call :divi %%n
goto :eof

:divi
cls & echo Working . .
set esPrimo=false
set /a divini=1
set /a divfin=%1
if %divfin:~-1%==5 (if %1 GTR 5 (goto :eof))
call :divi2 %1
if %esPrimo%==true (echo %1 >>primos.txt)
goto :eof

:divi2
cls & echo Working . . .
if %esPrimo%==true (goto :eof)
set /a divini +=1
if %divini% GTR %divfin% (goto :eof)
set /a mod=%1-(%1/%divini%*%divini%)
if not %mod%==0 (goto divi2)
if %mod%==0 (if not %1==%divini% (set esPrimo=false) else (set esPrimo=true))
goto :eof