我一直在尝试使用Mathematica中的Do和If语句找到毕达哥拉斯三元组。
我需要测试两个整数(a,b)是否构造了一个Pythagorean Triple,其中: 1< = a< = 100&& 1< = b< = 100
If[Element[Sqrt[a^2 + b^2], Integers] && a < b &&
b < Sqrt[a^2 + b^2],
Print["(", a, ",", b, ",", Sqrt[a^2 + b^2] ")"]]
该片段给出了印刷品,它们的三倍实际上是毕达哥拉斯三重奏,但我不确定如何测试a和b的所有值。 任何帮助都会很感激。
答案 0 :(得分:0)
Do[ If[ IntegerQ[r = Sqrt[i^2 + j^2]], Print[{i, j, r}]], {i,
100}, {j, i - 1}]
可能最好保存结果而不是使用Print
:
Reap[Do[ If[ IntegerQ[r = Sqrt[i^2 + j^2]], Sow[{i, j, r}]], {i,
100}, {j, i - 1}]][[2, 1]]
另一种方式..
Cases[Append[#, Norm@#] & /@
Subsets[Range[100], {2}], {_, _, _Integer}]
{{3,4,5},{5,12,13},{6,8,10},{7,24,25},{8,15,17},{9,12, 15},{9,40,41},{10,24,26},{11,60,61},{12,16,20},{12, 35,37},{13,84,85},{14,18,50},{15,20,25},{15,36, 39},{16,30,34},{16,63,65},{18,24,30},{18,80,82},{20, 21,29},{20,48,52},{20,99,101},{21,28,35},{21,72, 75},{24,32,40},{24,45,51},{24,70,74},{25,60,65},{27, 36,45},{28,45,53},{28,96,100},{30,40,50},{30,72, 78},{32,60,68},{33,44,55},{33,56,65},{35,84,91},{36, 48,60},{36,77,85},{39,52,65},{39,80,89},{40,42, 58},{40,75,85},{40,96,104},{42,56,70},{45,60,75},{48, 55,73},{48,64,80},{48,90,102},{51,68,85},{54,72, 90},{56,90,106},{57,76,95},{60,63,87},{60,80,100},{60, 91,109},{63,84,105},{65,72,97},{66,88,110},{69,92, 115},{72,96,120},{75,100,125},{80,84,116}}
Do
实际上更好,如果您需要运行到非常大的n
,Subsets
会占用大量内存。