Cod sursa(job #427460)

Utilizator zseeZabolai Zsolt zsee Data 27 martie 2010 21:18:22
Problema Ciurul lui Eratosthenes Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.09 kb
program primeknig;
const bitek:array[0..7] of byte = (1,2,4,8,16,32,64,128);
var be,ki:text;
    v:array[1..125000] of byte;
    n,i,j:longint;

function bennevanx( x:longint ):boolean;inline;
var m:byte;
begin
 m:= x and 7;
 x:= x shr 3;
 bennevanx := ((v[x]) and (bitek[m])) <> 0;
end;

function bennevan( x:longint ):boolean;inline;
begin
 bennevan:=bennevanx(x div 2);
end;

procedure berakx( x:longint );inline;
var m:byte;
begin
 m:= x and 7;
 x:= x shr 3;
 v[x]:= v[x] or bitek[m];
end;

procedure berak(x:longint);inline;
begin
 if odd(x) then berakx(x div 2);
end;

procedure kovprim;inline;
begin
 repeat
  i:=i+2
 until not(bennevan(i));
end;

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