Cod sursa(job #427414)

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

procedure berak(x:longint);inline;
begin
 m:=x and modize;
 x:=x shr 5;
 v[ x ] := v[ x ] + [ m ];
end;

function bennevan(x:longint):boolean;inline;
begin
 m:=x and modize;
 x:=x shr 5;
 bennevan := m in v[x];
end;

procedure kovprim;inline;
begin
 if odd(i) then i:=i+2
   else i:=i+1;
 while bennevan(i) do
    i:=i+2;
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.