HSPC14J spoj – Sàng

Nguồn đề bài: http://vn.spoj.com/problems/HSPC14J/

1. Đề bài HSPC 2014

Sàng của Eratosthenes là thuật toán nổi tiếng để tìm tất cả các số nguyên tố nhỏ hơn N. Thuật

toán như sau:

  1. Ghi ra tất cả các số nguyên giữa 2 và N.
  2. Tìm số nhỏ nhất chưa bị gạch và gọi nó là P (P là số nguyên tố).
  3. Gạch bỏ P và tất cả các bội số của nó mà chưa bị gạch.
  4. Nếu còn số chưa bị gạch bỏ, chuyển sang bước 2.

Viết một chương trình, cho N và K, tìm số nguyên thứ K bị gạch.

Input

Gồm nhiều bộ test, mỗi bộ test nằm trên một dòng gồm các số nguyên N và K (2 ≤ K < N ≤ 1000).

Output

Với mỗi test, in ra trên một dòng số thứ K bị gạch bỏ.

Example

Input:
7 3
15 12
10 7

Output:
6
7
9

2. Code tham khảo HSPC14J spoj

const   fi='';
        nmax=1000;

type    data=longint;

var
        f:text;
        x,M:data;
        A:array[1..nmax] of boolean;

procedure xuli;
var     i,j,k:data;

begin
        for i:=1 to x do a[i]:=false;
        i:=2;
        k:=0;
        while i<=x do
                begin
                        if not a[i] then
                                begin
                                        for j:=1 to x div i do
                                                if not a[i*j] then
                                                        begin
                                                                inc(k);
                                                                if k=m then
                                                                        begin
                                                                                writeln(i*j);
                                                                                exit;
                                                                        end;
                                                                a[i*j]:=true;
                                                        end;
                                end;
                        inc(i);
                end;
end;

begin
        assign(f,fi); reset(f);
        while not eof(f) do
                begin
                        readln(f,x,m);
                        xuli;
                end;
end.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *