File : nonsquares.sp


$ spar nonsquares.sp
 2 3 5 6 7 8 10 11 12 13 14 15 17 18 19 20 21 22 23 24 26 27


#!/usr/local/bin/spar

pragma annotate( summary, "nonsquares" );
pragma annotate( description, "Show that the following remarkable formula gives the" );
pragma annotate( description, "sequence of non-square natural numbers: n +" );
pragma annotate( description, "floor(1/2 + sqrt(n)).  Print out the values for n in" );
pragma annotate( description, "the range 1 to 22.  Show that no squares occur for n" );
pragma annotate( description, "less than one million." );
pragma annotate( see_also, "http://rosettacode.org/wiki/Sequence_of_non-squares" );
pragma annotate( author, "Ken O. Burtch" );
pragma license( unrestricted );

pragma restriction( no_external_commands );

procedure nonsquares is
 
   function is_non_square (n : positive) return positive is
   begin
      return n + positive (numerics.rounding(numerics.sqrt (long_float (n))));
   end is_non_square;
 
   i : positive;
begin
   for n in 1..22 loop -- First 22 non-squares
      put (strings.image (is_non_square (n)));
   end loop;
   new_line;
   for n in 1..1_000_000 loop -- Check first million of
      i := is_non_square (n);
      if i = positive (numerics.rounding(numerics.sqrt (long_float (i))))**2 then
         put_line ("Found a square:" & strings.image (n));
      end if;
   end loop;
end nonsquares;

-- VIM editor formatting instructions
-- vim: ft=spar