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.

Download