找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 67678|回复: 28

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

[复制链接]
发表于 2008-10-31 20:07:15 | 显示全部楼层 |阅读模式
求1000以内的所有素数
最好还要有解释的,新手啊...
发表于 2008-10-31 20:35:06 | 显示全部楼层
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. :a
  4. set /a num+=1
  5. if %num%==1 goto a
  6. for %%a in (2 3) do if %num%==%%a echo %%a&goto a
  7. if %num%==1000 pause>nul&exit
  8. set /a num2=num-1
  9. for /l %%b in (2 1 %num2%) do (
  10. set /a tp=%num%%%%%b
  11. if !tp!==0 set tp2=a
  12. )
  13. set tp2=&if "%tp2%"=="" echo %num%
  14. goto a
复制代码
发表于 2008-10-31 20:53:22 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (0 2 4 5 6 8) do set "_%%i=a"
  3. echo 1-1000內的素數如下:>素數.txt
  4. for /l %%a in (1,1,1000) do (
  5.      set "str=%%i"
  6.      if not defined _!str:~-1! (
  7.        set /a a=%%a/2+1,num=0
  8.        call :lp %%a
  9.      )
  10. )
  11. start 素數.txt
  12. goto :eof
  13. :lp
  14. for /l %%i in (1,1,%a%) do (
  15.      set /a b=%1/%%i*%%i
  16.      if !b! equ %1 set /a num+=1
  17.      if !num! equ 2 goto :eof
  18. )
  19. if %num% lss 2 echo %1 >>素數.txt
复制代码
发表于 2008-10-31 20:57:13 | 显示全部楼层
二樓的代碼效率是個問題,完全可以不要驗證一個數所有的約數,除本身外只要約數大於兩個就可以判斷出不是素數了。
发表于 2008-10-31 21:39:04 | 显示全部楼层
楼上的都是低效率
发表于 2008-10-31 22:15:02 | 显示全部楼层
不是完全模拟,经过了人工处理
测试代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (3 2 1000) do (
  4.         set flag=0
  5.         for /l %%j in (3 2 37) do (
  6.                 set /a var=%%i%%%%j
  7.                 if !var! EQU 0 set /a flag+=1
  8.         )
  9.         if !flag! LEQ 1 echo %%i
  10. )

  11. pause>nul
复制代码
发表于 2008-10-31 22:25:59 | 显示全部楼层
稍微修整:
  1. @echo off 2>nul 3>nul
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (3 2 1000) do (
  4.         set flag=0
  5.         for /l %%j in (3 2 37) do set /a 1/^(%%i%%%%j^) ||set/a flag+=1
  6.         if !flag! LEQ 1 echo %%i
  7. )

  8. pause>nul
复制代码

评分

参与人数 3PB +18 技术 +2 收起 理由
Gin_Q + 1 厉害!
wxcute + 10 + 1 经典,超快阿。 2 >nul 与 1/0|| 用得好。 ...
pusofalse + 8

查看全部评分

发表于 2008-10-31 22:44:20 | 显示全部楼层
for /l %%i in (1 3 999) do echo %%i
 楼主| 发表于 2008-10-31 22:59:45 | 显示全部楼层
大家能不能给点翻译啊?
发表于 2008-11-1 00:48:57 | 显示全部楼层
原帖由 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 %% ...

体现出兄扎实的数学功底,真是望尘莫及啊!
发表于 2008-11-1 13:04:26 | 显示全部楼层
怎么youxi的是从67开始?
发表于 2008-11-1 16:56:26 | 显示全部楼层

回复 11楼 的帖子

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

如果在运行初期你就按ctrl+c,或者echo到一个文本文件就可以看到全部了
发表于 2008-11-1 17:29:45 | 显示全部楼层
原帖由 youxi01 于 2008-11-1 16:56 发表
呵呵,那是因为批处理一屏显示不了那么多

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

if not "%1"=="more" call "%~0"|more&exit
发表于 2008-11-1 17:55:05 | 显示全部楼层
原帖由 youxi01 于 2008-11-1 16:56 发表
呵呵,那是因为批处理一屏显示不了那么多

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

原来如此
发表于 2008-11-3 10:48:26 | 显示全部楼层

写个用文件的

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. >ss.txt echo 2
  4. for /l %%i in (3 2 1000) do (
  5.  for /f %%j in (ss.txt) do (
  6.   set/a mod=%%i%%%%j
  7.   if !mod! equ 0 set flag=1
  8.  )
  9.  if defined flag (set flag=) else (>>ss.txt echo %%i)
  10. )
  11. type ss.txt
  12. pause
  13. goto :eof
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:10 , Processed in 0.025798 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表