KDEL - Xóa số
Tác giả: skyvn97
Ngôn ngữ: Pascal
program KDEL_VOJ;
const MAXN=1000000;
var
notprime:array [1..MAXN] of boolean;
s:ansistring;
next: array[1..MAXN,0..9] of longint;
n,k:longint;
procedure init;
begin
read(n,k);
end;
procedure eratosthene;
var
i,j,np:longint;
t:ansistring;
begin
notprime[0]:=true;
notprime[1]:=true;
np:=0;
for i:=1 to MAXN do
if not notprime[i] then
begin
for j:=2 to MAXN div i do notprime[j*i]:=true;
inc(np);
str(i,t);
s:=s+t;
if np=n then writeln(stderr,'Last prime is ',i);
if np=n then exit;
end;
end;
procedure process;
var
i,j,prev,len,rem:longint;
begin
rem:=k;
prev:=0;
len:=length(s);
for j:=0 to 9 do next[len+1,j]:=len+1;
for i:=len downto 1 do
begin
for j:=0 to 9 do next[i,j]:=next[i+1,j];
next[i,ord(s[i])-48]:=i;
end;
for i:=1 to len-k do
for j:=9 downto 0 do
if (next[prev+1,j]<=i+k) and (next[prev+1,j]<=prev+rem+1) then
begin
write(j);
rem:=rem-(next[prev+1,j]-prev-1);
prev:=next[prev+1,j];
break;
end;
end;
begin
init;
eratosthene;
process;
end.