[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 1# youxi01


    能做出100万位数以上的勾股吗

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 100) do (
  3.     for /l %%j in (%%i 1 100) do (
  4. for /l %%k in (%%i 1 100) do (
  5.     set /a l=%%i*%%i+%%j*%%j
  6.     set /a m=%%k*%%k
  7.     if !l!==!m! echo %%i*%%i+%%j*%%j=%%k*%%k
  8. )
  9.     )
  10. )
  11. pause > nul
复制代码

TOP

本帖最后由 小程936 于 2019-1-11 17:50 编辑

勾股数生成器
本程序可生成 所有小于(max-1)的平方的互质勾股数,无一遗漏。
算法依据:
任何一个勾股数,均可表示为 v(n2*v2),2vnm,v(n2+v2) 的形式
如果v=1,n+m=奇数,且n与m互质,则算出的勾股数(A,B,C)也一定互质。

详细公式
m>n,m+n=奇数,m与n互质
  1. set /a max=61
  2. rem 这个数越大。生成的勾股数就越多。你可以改成2000试试。
  3. rem 小程936原创出品。版权所有。
  4. @echo off&Setlocal enabledelayedexpansion&set /a b=1
  5. set /a min=2
  6. rem 从第min次循环开始(默认值为2)。从第(max-1)次循环后结束。max值越高求到的勾股数越多。
  7. rem 自动排除非互质项,(3,4,5)互质,而(6,8,10)不互质。输出结果为a,b,c (第几次循环,此次循环得到的第几个值)
  8. set ga=勾股数-%min%-%max%.txt
  9. echo %ga%>%ga%&title %ga%
  10. rem  控制输出文件名和文件首行。
  11. for /l %%j in (%min%,1,%max%) do (
  12. for /l %%k in (!b!,2,%%j) do (
  13.   
  14.   set /a a=m=%%j,b=n=%%k
  15.   call :f
  16.   if "!m!"=="1" (
  17.    rem 看看a与b是否互质。
  18.    
  19.    set /a cmin=a*a+b*b,bmin=a*a-b*b,amin=2*a*b
  20.    rem 计算a,b对应的勾股数amin,bmin,cmin   (a,b初始值2,1)
  21.   
  22.    if !amin! GTR !bmin! set /a v=bmin,bmin=amin,amin=v
  23.    echo.!amin!,!bmin!,!cmin! ^(%%j,%%k^)
  24.    rem 若bmin小于amin,交换位置。& 之后……记录下来。
  25.   )
  26. )>>%ga%
  27. echo !a!/%max%
  28.   rem 显示循环周期,
  29. set /a b=a%%2
  30. if "!b!"=="0" set /a b=2
  31. rem 重置b(若a为偶则b=2,若a为奇则b=1),之后a加1。
  32. )
  33. start "" %ga%
  34. exit
  35. rem 打开记录文件,结束程序。
  36. :f
  37. @set /a r=m%%n,m=n,n=r
  38. if "%r%"=="0" goto :eof
  39. goto f
  40. rem 计算m与n的最大公因数,输出m(临时占用变量r)
复制代码
去注释版
  1. set /a max=61
  2. @echo off&Setlocal enabledelayedexpansion&set /a b=1
  3. set /a min=2
  4. set ga=勾股数-%min%-%max%.txt
  5. echo %ga%>%ga%&title %ga%
  6. for /l %%j in (%min%,1,%max%) do (
  7. for /l %%k in (!b!,2,%%j) do (
  8. set /a a=m=%%j,b=n=%%k
  9. call :f
  10. if "!m!"=="1" (
  11. set /a cmin=a*a+b*b,bmin=a*a-b*b,amin=2*a*b
  12. if !amin! GTR !bmin! set /a v=bmin,bmin=amin,amin=v
  13. echo.!amin!,!bmin!,!cmin! ^(%%j,%%k^)
  14. ))>>%ga%
  15. echo !a!/%max%
  16. set /a b=a%%2
  17. if "!b!"=="0" set /a b=2
  18. )
  19. start "" %ga%
  20. exit
  21. :f
  22. @set /a r=m%%n,m=n,n=r
  23. if "%r%"=="0" goto :eof
  24. goto f
复制代码

TOP

返回列表