Heronian triangles: Difference between revisions

Content deleted Content added
Tcl implementation added
→‎{{header|Julia}}: A new entry for Julia
Line 651:
[7,65,68] 140 210
[3,148,149] 300 210</lang>
 
=={{header|Julia}}==
The type <tt>IntegerTriangle</tt> stores a triangle's sides (a, b, c), perimeter (p) and area (&sigma;) as integers. The function <tt>isprimheronian</tt> checks whether the a triangle of integer sides is a primitive Heronian triangle and is called prior to construction of an <tt>IntegerTriangle</tt>.
 
'''Types and Functions'''
<lang Julia>
type IntegerTriangle{T<:Integer}
a::T
b::T
c::T
p::T
σ::T
end
 
function IntegerTriangle{T<:Integer}(a::T, b::T, c::T)
p = a + b + c
s = div(p, 2)
σ = isqrt(s*(s-a)*(s-b)*(s-c))
(x, y, z) = sort([a, b, c])
IntegerTriangle(x, y, z, p, σ)
end
 
function isprimheronian{T<:Integer}(a::T, b::T, c::T)
p = a + b + c
iseven(p) || return false
gcd(a, b, c) == 1 || return false
s = div(p, 2)
t = s*(s-a)*(s-b)*(s-c)
0 < t || return false
σ = isqrt(t)
σ^2 == t
end
</lang>
 
'''Main'''
<lang Julia>
slim = 200
 
ht = IntegerTriangle[]
 
for a in 1:slim, b in a:slim, c in b:slim
isprimheronian(a, b, c) || continue
push!(ht, IntegerTriangle(a, b, c))
end
 
sort!(ht, by=x->(x.σ, x.p, x.c))
 
print("The number of primitive Hernonian triangles having sides ≤ ")
println(slim, " is ", length(ht))
 
tlim = 10
tlim = min(tlim, length(ht))
 
println()
println("Tabulating the first (by σ, p, c) ", tlim, " of these:")
println(" a b c σ p")
for t in ht[1:tlim]
println(@sprintf "%6d %3d %3d %4d %4d" t.a t.b t.c t.σ t.p)
end
 
tlim = 210
println()
println("Tabulating those having σ = ", tlim, ":")
println(" a b c σ p")
for t in ht
t.σ == tlim || continue
t.σ == tlim || break
println(@sprintf "%6d %3d %3d %4d %4d" t.a t.b t.c t.σ t.p)
end
</lang>
 
{{out}}
<pre>
The number of primitive Hernonian triangles having sides ≤ 200 is 517
 
Tabulating the first (by σ, p, c) 10 of these:
a b c σ p
3 4 5 6 12
5 5 6 12 16
5 5 8 12 18
4 13 15 24 32
5 12 13 30 30
9 10 17 36 36
3 25 26 36 54
7 15 20 42 42
10 13 13 60 36
8 15 17 60 40
 
Tabulating those having σ = 210:
a b c σ p
17 25 28 210 70
20 21 29 210 70
12 35 37 210 84
17 28 39 210 84
7 65 68 210 140
3 148 149 210 300
</pre>
 
=={{header|Nim}}==