返回列表 发帖

批处理求1000以内的所有素数

求1000以内的所有素数
最好还要有解释的,新手啊...
砂石下的泉水,掘得越深,泉水会越清吗?

@echo off
setlocal ENABLEDELAYEDEXPANSION
:a
set /a num+=1
if %num%==1 goto a
for %%a in (2 3) do if %num%==%%a echo %%a&goto a
if %num%==1000 pause>nul&exit
set /a num2=num-1
for /l %%b in (2 1 %num2%) do (
set /a tp=%num%%%%%b
if !tp!==0 set tp2=a
)
set tp2=&if "%tp2%"=="" echo %num%
goto aCOPY
论坛标题管理观察员

TOP

@echo off&setlocal enabledelayedexpansion
for %%i in (0 2 4 5 6 8) do set "_%%i=a"
echo 1-1000內的素數如下:>素數.txt
for /l %%a in (1,1,1000) do (
     set "str=%%i"
     if not defined _!str:~-1! (
       set /a a=%%a/2+1,num=0
       call :lp %%a
     )
)
start 素數.txt
goto :eof
:lp
for /l %%i in (1,1,%a%) do (
     set /a b=%1/%%i*%%i
     if !b! equ %1 set /a num+=1
     if !num! equ 2 goto :eof
)
if %num% lss 2 echo %1 >>素數.txtCOPY
***共同提高***

TOP

二樓的代碼效率是個問題,完全可以不要驗證一個數所有的約數,除本身外只要約數大於兩個就可以判斷出不是素數了。
***共同提高***

TOP

楼上的都是低效率

TOP

不是完全模拟,经过了人工处理
测试代码:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (3 2 1000) do (
set flag=0
for /l %%j in (3 2 37) do (
set /a var=%%i%%%%j
if !var! EQU 0 set /a flag+=1
)
if !flag! LEQ 1 echo %%i
)
pause>nulCOPY

TOP

稍微修整:
@echo off 2>nul 3>nul
setlocal enabledelayedexpansion
for /l %%i in (3 2 1000) do (
set flag=0
for /l %%j in (3 2 37) do set /a 1/^(%%i%%%%j^) ||set/a flag+=1
if !flag! LEQ 1 echo %%i
)
pause>nulCOPY
3

评分人数

    • Gin_Q: 厉害!技术 + 1
    • wxcute: 经典,超快阿。 2 >nul 与 1/0|| 用得好。 ...PB + 10 技术 + 1
    • pusofalse:PB + 8

TOP

for /l %%i in (1 3 999) do echo %%i

TOP

大家能不能给点翻译啊?
砂石下的泉水,掘得越深,泉水会越清吗?

TOP

原帖由 youxi01 于 2008-10-31 22:25 发表
稍微修整:@echo off 2>nul 3>nul
setlocal enabledelayedexpansion
for /l %%i in (3 2 1000) do (
        set flag=0
        for /l %%j in (3 2 37) do set /a 1/^(%%i%%%%j^) ||set/a flag+=1
        if !flag! LEQ 1 echo %% ...

体现出兄扎实的数学功底,真是望尘莫及啊!
***共同提高***

TOP

怎么youxi的是从67开始?

TOP

回复 11楼 的帖子

呵呵,那是因为批处理一屏显示不了那么多

如果在运行初期你就按ctrl+c,或者echo到一个文本文件就可以看到全部了

TOP

原帖由 youxi01 于 2008-11-1 16:56 发表
呵呵,那是因为批处理一屏显示不了那么多

如果在运行初期你就按ctrl+c,或者echo到一个文本文件就可以看到全部了

if not "%1"=="more" call "%~0"|more&exit
论坛标题管理观察员

TOP

原帖由 youxi01 于 2008-11-1 16:56 发表
呵呵,那是因为批处理一屏显示不了那么多

如果在运行初期你就按ctrl+c,或者echo到一个文本文件就可以看到全部了

原来如此

TOP

写个用文件的

@echo off
setlocal enableDelayedExpansion
>ss.txt echo 2
for /l %%i in (3 2 1000) do (
 for /f %%j in (ss.txt) do (
  set/a mod=%%i%%%%j
  if !mod! equ 0 set flag=1
 )
 if defined flag (set flag=) else (>>ss.txt echo %%i)
)
type ss.txt
pause
goto :eofCOPY

TOP

返回列表