Anonymous user
Heronian triangles: Difference between revisions
m
→{{header|REXX}}: optimized program (3 times faster), added more checks for primitive Heronian triangles before calculating SQRT, also, postponed GCD test.
Walterpachl (talk | contribs) (added ooRexx) |
m (→{{header|REXX}}: optimized program (3 times faster), added more checks for primitive Heronian triangles before calculating SQRT, also, postponed GCD test.) |
||
Line 682:
if area=='' | area==',' then area=210 /* " " " " */
numeric digits max(9, 1+length(N**4)) /*ensure enough decimal digs*/
call Heron /*invoke Heron subroutine. */
call show , 'listing of the first ' first ' primitive Heronian triangles:'
call show
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────HERON subroutine────────────────────*/
do
do
#=#+1 /*got prim. H. tri.*/
minP=min( p,minP); maxP=max( p,maxP); Lp=length(maxP)▼
if @.ar.p.0==. then @.ar.p.0=0; _=@.ar.p.0+1 /*bump triangle ctr*/
@.ar.p.0=_;
end /*c*/ /* [↑] keep each unique P items.*/
end /*b*/
Line 708:
return # /*return # of Heronian triangles.*/
/*──────────────────────────────────HGCD subroutine─────────────────────*/
hGCD: procedure; parse arg x
do j=2 for 2; y=arg(j); do until _==0; _=x//y; x=y; y=_; end; end
return x
/*──────────────────────────────────SHOW subroutine─────────────────────*/
show: m=0; say; say; parse arg ae
say /* [↓] skip the nothings. */
do
if ae\==''
do j=minP to maxP until m>=first /*only list FIRST entries.*/
if @.i.j.0==. then iterate /*Not defined? Then skip it.*/
do k=1 for @.i.j.0;
▲ say right(m,9) ' area:' right(i,La) " perimeter:" ,
end /*k*/
end /*j*/ /* [↑] use known perimeters*/
end /*i*/ /* [↑] show
return
/*──────────────────────────────────SQRT subroutine─────────────────────────*/
Line 738 ⟶ 736:
listing of the first 10 primitive Heronian triangles:
1 area: 6 perimeter: 12 sides: 3 4 5
2 area: 12 perimeter: 16 sides: 5 5 6
3 area: 12 perimeter: 18 sides: 5 5 8
4 area: 24 perimeter: 32 sides: 4 13 15
5 area: 30 perimeter: 30 sides: 5 12 13
6 area: 36 perimeter: 36 sides: 9 10 17
7 area: 36 perimeter: 54 sides: 3 25 26
8 area: 42 perimeter: 42 sides: 7 15 20
9 area: 60 perimeter: 36 sides: 10 13 13
10 area: 60 perimeter: 40 sides: 8 15 17
listing of the (above) found primitive Heronian triangles with an area of 210
1 area: 210 perimeter: 70 sides: 17 25 28
2 area: 210 perimeter: 70 sides: 20 21 29
3 area: 210 perimeter: 84 sides: 12 35 37
4 area: 210 perimeter: 84 sides: 17 28 39
5 area: 210 perimeter: 140 sides: 7 65 68
6 area: 210 perimeter: 300 sides: 3 148 149
</pre>
|