Heronian triangles: Difference between revisions
Content added Content deleted
(Add Rust implementation) |
No edit summary |
||
Line 2,991: | Line 2,991: | ||
3 148 149 210 300 |
3 148 149 210 300 |
||
</pre> |
</pre> |
||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
|||
<lang Mathematica>ClearAll[Heron] |
|||
Heron[a_, b_, c_] := With[{s = (a + b + c)/2}, Sqrt[s (s - a) (s - b) (s - c)]] |
|||
PrintTemporary[Dynamic[{a, b, c}]]; |
|||
results = Reap[ |
|||
Do[ |
|||
If[a < b + c \[And] b < c + a \[And] c < a + b, |
|||
If[GCD[a, b, c] == 1, |
|||
If[IntegerQ[Heron[a, b, c]], |
|||
Sow[<|"Sides" -> {a, b, c}, "Area" -> Heron[a, b, c], |
|||
"Perimeter" -> a + b + c, "MaximumSide" -> Max[a, b, c]|>] |
|||
] |
|||
] |
|||
] |
|||
, |
|||
{a, 1, 200}, |
|||
{b, a, 200}, |
|||
{c, b, 200} |
|||
] |
|||
][[2, 1]]; |
|||
results = SortBy[results, {#["Area"] &, #["Perimeter"] &, #["MaximumSide"] &}]; |
|||
results // Length |
|||
Take[results, 10] // Dataset |
|||
Select[results, #["Area"] == 210 &] // Dataset</lang> |
|||
{{out}} |
|||
<pre>517 |
|||
Sides Area Perimeter MaximumSide |
|||
{3,4,5} 6 12 5 |
|||
{5,5,6} 12 16 6 |
|||
{5,5,8} 12 18 8 |
|||
{4,13,15} 24 32 15 |
|||
{5,12,13} 30 30 13 |
|||
{9,10,17} 36 36 17 |
|||
{3,25,26} 36 54 26 |
|||
{7,15,20} 42 42 20 |
|||
{10,13,13} 60 36 13 |
|||
{8,15,17} 60 40 17 |
|||
Sides Area Perimeter MaximumSide |
|||
{17,25,28} 210 70 28 |
|||
{20,21,29} 210 70 29 |
|||
{12,35,37} 210 84 37 |
|||
{17,28,39} 210 84 39 |
|||
{7,65,68} 210 140 68 |
|||
{3,148,149} 210 300 149</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |