2017-02-15 10 views
0

私は、MathematicaでDoとIfの文を使ってピタゴラスのトリプルを見つけようとしていました。ピタゴラスのトリプルを見つける

Iを(a、b)は、ピタゴラストリプル構成、二つの整数かどうかをテストする必要があります。スニペット

If[Element[Sqrt[a^2 + b^2], Integers] && a < b && 
    b < Sqrt[a^2 + b^2], 
Print["(", a, ",", b, ",", Sqrt[a^2 + b^2] ")"]] 

= 100 < & = B < = 100

を= 1 <を実際にピタゴラスのトリプルであるトリプルがプリントされますが、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}、{10,12,13} 24,26}、{11,60,61}、{12,16,20}、{12,{16,30,34}、{16,30,32,34,35,36,38,40,45,40,45,40,45,40,45,40,45} {20,48,52}、{20,99,101}、{21,28}、{18,24,30}、{18,80,82}、{20, 21,29} {24,32,41}、{24,45,51}、{24,70,74}、{25,60,65}、{27, 、36}、{35,21}、{21,72, } {32,60,68}、{33,44,45}、{45,45,53}、{28,96,100}、{30,40,50}、{30,72, } 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 {56,90,106}、{57,76,95}、{48,64,80}、{48,90,102}、{51,68,85}、{54,72, } {60,63,87}、{60,80,100}、{60, 91、109}、{63、 84,95}、{65,72,97}、{66,88,110}、{69,92、 115}、{72,96,120}、{75,100,125}、{80,84あなたはSubsetsは、大量のメモリを消費することになります非常に大きなnに実行する必要がある場合は、116}}

Doは実際に優れています。