求一个批处理求素数好的算法。

来源:百度知道 编辑:UC知道 时间:2024/06/07 09:57:00
我已经做出一个利用批处理求素数的批处理。这个批处理的算法不怎么好,执行效率低,求到过万的数字时,需要等待很久,除非你cpu比较好才短点。我讲我写的公布出来:请帮我修正.
@echo off
setlocal enabledelayedexpansion
color 2f
set a= 欢迎光临火炬工作室!
for /l %%i in (1,1,30) do (
set/p=!a:~%%i,1!<nul
ping/n 127.1 >nul
)
echo.&echo.&echo.&echo 该批处理能够判断一个数是否为素数!
echo.&echo.&echo.&echo.&echo.
:a
set n=2
set /p a= 请输入:
echo 正在判断,请稍后。。。
if %a% LSS -2 goto n
if %a% GTR 2 (goto b )else (echo 请输入非-2≤x≤2之间整数&goto a)
:n
set a=%a:~1%
goto b

:b
set /a ab=%a%%%n%
set /a n+=1
if "%ab%"=="0" (goto c) else (goto b)
)
:c
if !n! GEQ !a! (echo 这个数%a%是素数)else (echo 这个数%a%不是素数)
goto a
二楼的:你的批处理无法执行,采用那么多退格我也不明白你的意思。
我在写这段代码的时候,是使用过for命令,但是在跳出循环的时候老是出问题,要不就无法进行累加运算,就一直除以一个二,造成判断错误。
这段代码在实行1000以下的数字时,效率还是可以的,就是对非素数的数值计算的比较快。
由于批处理无法实现对小数的运算,因为我考虑过素数另一种算法,就是到这个数的一半,还不能被

怎么可能没发运行呢?我从网页上把我的代码考下来,然后放到xp和vista都能运行的呀.
退格是为了显示上的方便.要是你是退格出的问题的话,你把所有的"set/p<nul=%%i"和"set/p<nul=&"删除试试.
你应当注意到我for里面用的是!n!而不是%n%,而且开头有setlocal enabledelayexpansion,这样就没有你说的变量数值"不改变"问题,详见set /?.

你那个批处理的效率问题主要是以下两个原因:
1.你那个n循环最多可以到a,应当是到达到a^0.5就退出
2.判断素数的循环里用goto而不用for /l造成频繁读硬盘,速度成问题(是不是也对硬盘不好?)

@echo off
setlocal enabledelayedexpansion
:loop
set /p "n=数字:"
call:p "!n!"
if errorlevel 1 (echo !n!是素数) else echo !n!不是素数
goto loop
:p
set /a "n=%~1"
if not !n! gtr 1 exit /b 0
set /a "c=1"
:loop2
set /a "d=!c!*!c!"
if !d! lss !n! set /a "c=!c!*2"&goto loop2
for /l %%i in (2,1,!c!) do (
set/p<nul=%%i
set /a "b=%%i*%%i"
if !b! gtr !n! set/p<nul=&exit /b 1
set /a "b=!n!/%%i"
set /a "