发一个素数查找的
有一定缺陷,理论上数字可以是2^31以内,但只能到13000左右。
原因是set命令只能有8K字符长度,超过8K的话bat设置的set命令全部清除,也就造成后面代码出错。
这个效率应该可以!- @echo off&setlocal ENABLEDELAYEDEXPANSION
- if %1.==. (set i=100) else set /a i=%1||exit/b
- set time_0=!time!
- set "p=2 3 5 7 11 13 17 19"
- for %%a in (!p!) do (if %%a gtr !i! (exit/b) else echo %%a)
- set i_0=!i:~0,-1!
- set "p=3 7 11 13 17 19"
- for /l %%a in (2,1,!i_0!) do (
- for %%b in (1 3 7 9) do (
- set p_0=!p!
- set /a x_%%b=0
- for %%c in (!p_0!) do (
- if !x_%%b! equ 0 (
- set /a p_1=%%a%%b %% %%c
- if !p_1! equ 0 set /a x_%%b=1,p_0=1
- )
- )
- if %%a%%b gtr !i! (echo 开始时间:!time_0!&echo 结束时间:!time!&exit/b) else (
- if !x_%%b! equ 0 set "p=!p! %%a%%b"&echo %%a%%b
- )
- )
- )
- exit/b
复制代码
|