找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: youxi01

批处理找1-100以内的所有勾股数?

[复制链接]
发表于 2015-8-12 18:03:03 | 显示全部楼层
回复 1# youxi01


    能做出100万位数以上的勾股吗
发表于 2015-10-19 14:33:44 | 显示全部楼层
  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
复制代码
发表于 2019-1-10 11:04:56 | 显示全部楼层
本帖最后由 小程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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:05 , Processed in 0.016029 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表