Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 0.84 KB | None | 0 0
  1.  
  2. package Factor with SPARK_Mode
  3. is
  4.    procedure Smallest_Factor (N : in out Positive; Factor : out Positive)
  5.      with SPARK_Mode,
  6.      Pre => N > 1,
  7.      Post => (Factor > 1) and
  8.              (N'Old / Factor = N) and
  9.              (N'Old rem Factor = 0) and
  10.              (for all J in 2 .. Factor - 1 => N'Old rem J /= 0);
  11.  
  12. end Factor;
  13.  
  14. -- =================================================
  15.  
  16. package body Factor with SPARK_Mode
  17. is
  18.  
  19.    procedure Smallest_Factor (N : in out Positive; Factor : out Positive)
  20.      with SPARK_Mode
  21.    is
  22.    begin
  23.       Factor := 2;
  24.       for I in 2 .. N loop
  25.          
  26.          pragma Loop_Invariant (for all J in 2 .. I - 1 => N rem J /= 0);
  27.          
  28.          Factor := I;
  29.          exit when N rem I = 0;
  30.       end loop;
  31.      
  32.       N := N / Factor;
  33.      
  34.    end Smallest_Factor;
  35.  
  36. end Factor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement