- @echo off
- Rem code by youxi01@cmd_xp
- title 哥德巴赫猜想
- REM 验证数值在10000以内,对于超过的10000的数值,个人认为要生成临时文件(质数)以提高
- REM 效率
- setlocal enabledelayedexpansion
-
- :Start
- cls
- set flag=1
-
- ::这里从数字6开始,前面的4在这里没考虑。
- set/p EN=请输入6~10000之间的偶数:
-
- Rem ==============================
- set/a var=-1
- ::简单的判断输入的数字是否合法
- set/a var=%EN%>nul 2>nul
- if %var% GTR 1 (
- set/a var=%EN% %% 2
- if !var! NEQ 0 set flag=0) else set flag=0
- if %flag%==0 echo. & echo 数字输入非法,请重新输入 &echo. & pause & goto :Start
- Rem===============================
- echo.
-
- ::这里将输入的数字分成两个数字之和,其中第一个数字的值不超过原来数字的一半(避免重复)
- set/a Enum=%EN%/2
- For /l %%i in (3 2 %Enum%) do (
- set/a EN1=%%i
- set/a EN2=%EN%-!EN1!
-
- ::检测!EN1!是否是质数;如果不是,则将Res1赋值为NO;
- call :IsPrime !EN1! Res1
-
- ::如果!EN1!是质数;则检测!EN2!是否为质数,如果不是,则将Res2赋值为NO;
- if "!Res1!"=="" call :IsPrime !EN2! Res2
-
- ::如果!Res2!的值仍为空(即为质数),检测完成,然后退出。
- if "!Res2!"=="" echo !EN!可以表示为两个质数之和:!EN1!+!EN2!=%EN%
- )
- echo.
- pause
- goto :Start
-
- Rem ============================
- :: 以下程序用来检测数字是否是质数
- Rem ============================
-
- :IsPrime 被检测数字(参数1) 返回值(参数2)
- if %1 GTR 100 (set/a Enum=100) else set/a Enum=%1-2
-
- ::先将参数2这个变量清空。
- set "%2="
- For /l %%i in (3 2 %Enum%) do (
- set/a t_num=%1 %% %%i
- if !t_num! EQU 0 set %2=NO & goto :eof)
复制代码
|