中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]*****筛选质数***** 上一主题 | 下一主题
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『楼 主』:  [原创]*****筛选质数*****


@echo off
setlocal enabledelayedexpansion
::::::::::::::::::::::::::::Find Prime Numbers::::::::::::::::::::::::::::
::::::::::::::::::::::::::::{s11ss  2007-9-20}::::::::::::::::::::::::::::
:r
echo Please input the upper limit number:
set /p n=
if not !n! geq 2 (echo 2 at least. & goto :r)
set /a i=2
:ci
set /a j=!i!
:cj
set /a m=!i!*!j!
if !m! leq !n! (
        set /a j+=1
        ::set /a counter+=1
        set m!m!=1
        goto :cj
) else (
        set /a i+=1
        set /a ii=!i!*!i!
        if !ii! leq !n! (goto :ci) else (goto :e)
)
:e
set s=
for /l %%a in (2,1,!n!) do (
        if !m%%a! equ 1 (
                set s=%%a !s!
        )
)
set /a counter=0
echo.
echo In [2,!n!],prime numbers are:
for /l %%a in (2,1,!n!) do (
        set isprime=True
        set prime=%%a
        for %%b in (!s!) do (
                if !prime! equ %%b set isprime=False
        )
        if !isprime! equ True (
                echo !prime!
                set /a counter+=1
        )
)
echo.
echo In total:!counter!
echo.
echo Press Any Key To Exit.
pause>nul
修改提速版:
@echo off
setlocal enabledelayedexpansion
::::::::::::::::::::::::::::Find Prime Numbers::::::::::::::::::::::::::::
::::::::::::::::::::::::::::{s11ss  2007-9-20}::::::::::::::::::::::::::::
:r
echo Please input the upper limit number:
set /p n=
if not !n! geq 2 (echo 2 at least. & goto :r)
echo.
echo Calculating...
set /a i=2
for /l %%a in (2,1,!n!) do (
        set m%%a=0
)
:ci
set /a j=!i!
:cj
set /a m=!i!*!j!
if !m! leq !n! (
        set /a j+=1
        set m!m!=1
        goto :cj
) else (
        set /a i+=1
        set /a ii=!i!*!i!
        if !ii! leq !n! (goto :ci) else (goto :e)
)
:e
set /a counter=0
echo.
echo In [2,!n!],prime numbers are:
for /l %%a in (2,1,!n!) do (
        if !m%%a! equ 0 (
                echo %%a
                set /a counter+=1
                )
)
echo.
echo In total:!counter!
echo.
echo Press Any Key To Exit.
pause>nul
[ Last edited by s11ss on 2007-9-20 at 10:27 PM ]

2007-9-20 22:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: