Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 1.33 KB | None | 0 0
  1. with Ada.Text_IO;
  2.  
  3. procedure Pythagorean_Triples is
  4.  
  5.    type Large_Natural is range 0 .. 2**63-1;
  6.      -- this is the maximum for gnat
  7.  
  8.    procedure New_Triangle(A, B, C: Large_Natural;
  9.                           Max_Perimeter: Large_Natural;
  10.                           Total_Cnt, Primitive_Cnt: in out Large_Natural) is
  11.       Perimeter: constant Large_Natural := A + B + C;
  12.    begin
  13.       if Perimeter <= Max_Perimeter then
  14.          Primitive_Cnt := Primitive_Cnt + 1;
  15.          Total_Cnt     := Total_Cnt + Max_Perimeter / Perimeter;
  16.          New_Triangle(A-2*B+2*C,     2*A-B+2*C,    2*A-2*B+3*C,   Max_Perimeter, Total_Cnt, Primitive_Cnt);
  17.          New_Triangle(A+2*B+2*C,     2*A+B+2*C,    2*A+2*B+3*C,   Max_Perimeter, Total_Cnt, Primitive_Cnt);
  18.          New_Triangle(2*B+2*C-A,     B+2*C-2*A,    2*B+3*C-2*A,   Max_Perimeter, Total_Cnt, Primitive_Cnt);
  19.       end if;
  20.    end New_Triangle;
  21.  
  22.    T_Cnt, P_Cnt: Large_Natural;
  23.  
  24. begin
  25.    for I in 1 .. 9 loop
  26.       T_Cnt := 0;
  27.       P_Cnt := 0;
  28.       New_Triangle(3,4,5, 10**I, Total_Cnt => T_Cnt, Primitive_Cnt => P_Cnt);
  29.       Ada.Text_IO.Put_Line("Up to 10 **" & Integer'Image(I) & " :" &
  30.                              Large_Natural'Image(T_Cnt) & " Triples," &
  31.                              Large_Natural'Image(P_Cnt) & " Primitives");
  32.    end loop;
  33. end Pythagorean_Triples;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement