Cod sursa(job #427447)

Utilizator zseeZabolai Zsolt zsee Data 27 martie 2010 21:07:58
Problema Ciurul lui Eratosthenes Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.87 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..250000] of byte;
    n,i,j:longint;

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

procedure berak( x:longint);
var m:byte;
begin
 m:= x and 7;
 x:= x shr 3;
 v[x]:= v[x] or bitek[m];
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.