
Untitled
By: a guest on
Aug 10th, 2012 | syntax:
None | size: 3.97 KB | hits: 5 | expires: Never
{$mode objfpc}
{$R-,Q-,S-,I-}
{$inline on}
const maxN = 50000;
maxD = 611953;
maxS = 300000;
type TString = ansistring;
var a : array [1 .. maxN] of integer;
avail : array [1 .. maxD] of boolean;
head : array ['0' .. '9'] of integer;
link : array [1 .. maxS] of integer;
res : TString;
n , k , m : integer;
procedure enter; inline;
begin
readln( n , k );
fillchar( avail , sizeof( avail ) , true );
end;
procedure GetPrime; inline;
var i , j : integer;
begin
for i := 2 to maxD do
if avail[i] then
begin
j := 1;
inc( m ); a[m] := i;
if m >= n then exit;
while i * j <= maxD do
begin
avail[i * j] := false;
inc( j );
end;
end;
end;
procedure init; inline;
var i : integer;
t : TString;
begin
for i := 1 to n do
begin
str( a[i] , t );
res := res + t;
end;
n := length( res );
fillchar( avail , sizeof( avail ) , true );
end;
procedure solve; inline;
var i , j : integer;
u : char;
begin
for i := 1 to n do
begin
if k <= 0 then exit;
link[i] := head[res[i]];
head[res[i]] := i;
for u := '0' to '9' do
if u < res[i] then
begin
j := head[u];
while j > 0 do
begin
avail[j] := false;
dec( k );
if k <= 0 then exit;
j := link[j];
end;
head[u] := 0;
end
else
break;
end;
end;
procedure del; inline;
var i : integer;
begin
for i := n downto 1 do
if avail[i] then
begin
if k <= 0 then exit;
avail[i] := false;
dec( k );
end;
end;
procedure result; inline;
var i : integer;
begin
for i := 1 to n do
if avail[i] then
write( res[i] );
end;
begin
enter;
GetPrime;
init;
solve;
Del;
result;
end.