当前位置:DOS资源站资料中心批处理教程 → 用批处理哥代码验证德巴赫猜想(10000以内)

用批处理哥代码验证德巴赫猜想(10000以内)

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-4-20 17:30:35

说明:验证10000以内的数字是否符合 哥德巴赫猜想
要验证更大的数字,请自行修改代码。

@echo off&title DOS资源站 www.cmdos.net
::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)