Pythagorean triples: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Add Perl 6 example) |
(Added Ada code) |
||
Line 12: | Line 12: | ||
;Cf: |
;Cf: |
||
* [[List comprehensions]] |
* [[List comprehensions]] |
||
=={{header|Ada}}== |
|||
Translation of efficient method from C, see [[wp:Pythagorean_triple#Parent.2Fchild_relationships|the same WP article]]. Compiled on gnat/gcc. |
|||
<lang Ada>with Ada.Text_IO; |
|||
procedure Pythagorean_Triples is |
|||
type Large_Natural is range 0 .. 2**63-1; |
|||
-- this is the maximum for gnat |
|||
procedure New_Triangle(A, B, C: Large_Natural; |
|||
Max_Perimeter: Large_Natural; |
|||
Total_Cnt, Primitive_Cnt: in out Large_Natural) is |
|||
Perimeter: constant Large_Natural := A + B + C; |
|||
begin |
|||
if Perimeter <= Max_Perimeter then |
|||
Primitive_Cnt := Primitive_Cnt + 1; |
|||
Total_Cnt := Total_Cnt + Max_Perimeter / Perimeter; |
|||
New_Triangle(A-2*B+2*C, 2*A-B+2*C, 2*A-2*B+3*C, |
|||
Max_Perimeter, Total_Cnt, Primitive_Cnt); |
|||
New_Triangle(A+2*B+2*C, 2*A+B+2*C, 2*A+2*B+3*C, |
|||
Max_Perimeter, Total_Cnt, Primitive_Cnt); |
|||
New_Triangle(2*B+2*C-A, B+2*C-2*A, 2*B+3*C-2*A, |
|||
Max_Perimeter, Total_Cnt, Primitive_Cnt); |
|||
end if; |
|||
end New_Triangle; |
|||
T_Cnt, P_Cnt: Large_Natural; |
|||
begin |
|||
for I in 1 .. 8 loop |
|||
T_Cnt := 0; |
|||
P_Cnt := 0; |
|||
New_Triangle(3,4,5, 10**I, Total_Cnt => T_Cnt, Primitive_Cnt => P_Cnt); |
|||
Ada.Text_IO.Put_Line("Up to 10 **" & Integer'Image(I) & " :" & |
|||
Large_Natural'Image(T_Cnt) & " Triples," & |
|||
Large_Natural'Image(P_Cnt) & " Primitives"); |
|||
end loop; |
|||
end Pythagorean_Triples;</lang> |
|||
Output: |
|||
<pre>Up to 10 ** 1 : 0 Triples, 0 Primitives |
|||
Up to 10 ** 2 : 17 Triples, 7 Primitives |
|||
Up to 10 ** 3 : 325 Triples, 70 Primitives |
|||
Up to 10 ** 4 : 4858 Triples, 703 Primitives |
|||
Up to 10 ** 5 : 64741 Triples, 7026 Primitives |
|||
Up to 10 ** 6 : 808950 Triples, 70229 Primitives |
|||
Up to 10 ** 7 : 9706567 Triples, 702309 Primitives |
|||
Up to 10 ** 8 : 113236940 Triples, 7023027 Primitives</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |
||
Sample implemention; naive method, patentedly won't scale to larger numbers, despite the attempt to optimize it. Calculating up to 10000 is already a test of patience. |
Sample implemention; naive method, patentedly won't scale to larger numbers, despite the attempt to optimize it. Calculating up to 10000 is already a test of patience. |
||
<lang C>#include <stdio.h> |
<lang C>#include <stdio.h> |