Board logo

标题: [数值计算] 批处理验证歌德巴赫猜想 [打印本页]

作者: youxi01    时间: 2007-11-1 14:39     标题: 批处理验证歌德巴赫猜想

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





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2