-- $Id: sieve.gnat,v 1.0 2003/06/11 12:03:00 dada Exp $
-- http://dada.perl.it/shootout/
-- Ada 95 code by C.C.
with Text_IO, Ada.Command_Line;
procedure Sieve is
High : constant := 8192;
Is_Prime : array (2 .. High) of Boolean;
Count, K, N : Natural := 0;
begin
begin
N := Natural'Value (Ada.Command_Line.Argument (1));
exception
when Constraint_Error => null;
end;
for Iter in 1 .. N loop
declare
pragma Suppress (Overflow_Check);
pragma Suppress (Index_Check);
pragma Suppress (Range_Check);
begin
Count := 0;
Is_Prime := (others => True);
for J in Is_Prime'Range loop
if Is_Prime (J) then
K := J + J;
while K <= Is_Prime'Last loop
Is_Prime (K) := False; -- K is not a prime since a
K := K + J; -- multiple of prime J
end loop;
Count := Count + 1;
end if;
end loop;
end;
end loop;
Text_IO.Put_Line ("Count:" & Natural'Image (Count));
end Sieve;