2017-02-15 38 views
0

我一直試圖在Mathematica中使用Do和If語句來查找畢達哥拉斯三元組。查找畢達哥拉斯三元組

我需要測試,如果兩個整數,(A,B),構建一個畢達哥拉斯三重其中: =一個< = 100 & = 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
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[#, [email protected]#] & /@ 
    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},{ 24,26},{11,60,61},{12,16,20},{12,,35,37},{13,84,85},{14,48,50},{15,20,25},{15,36, }},{16,30,34},{ 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,59 },{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,65},{65,72,97},{66,88,110},{69,92, 115},{72,96,120},{75,100,125},{80,84 ,116}}

Do實際上是更好,如果你需要運行到非常大的n其中Subsets會消耗大量的內存。

相關問題