Cod sursa(job #427403)

Utilizator zseeZabolai Zsolt zsee Data 27 martie 2010 20:36:53
Problema Ciurul lui Eratosthenes Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 0.91 kb
program ciur;
type sett = set of 0..31;
var v:array[1..250000] of sett;
    n:longint;
    be,ki:text;
    i,j:longint;

procedure berak(x:longint);
var m:byte;
begin
 //write('berak ',x);
 m:=x mod 32;
 x:=x div 32;
 v[ x ] := v[ x ] + [ m ];
 //writeln(' (',x,';',m,') ');

end;

function bennevan(x:longint):boolean;
var m:byte;
begin
 //write('bennevan? ',x);
 m:=x mod 32;
 x:=x div 32;
 bennevan := m in v[x];
 //writeln(' (',x,';',m,') ',m in v[x]);
end;

procedure kovprim;
begin
 inc(i);
 while bennevan(i) do
    inc(i);
end;

begin
 assign(be,'ciur.in');
 assign(ki,'ciur.out');
 reset(be);
 rewrite(ki);
 readln(be,n);
 i:=2;
 while i*i <= n do
   begin
    j:=i*i;
    while j <= n do
       begin
        berak( j );
        j:=j + i;
       end;
    kovprim;
   end;
 j:=0;
 for i:=2 to n do
   if not bennevan(i) then inc(j);
 writeln(ki,j);
 close(ki);
end.