01/10/2018, 14:52

Cần mọi người giải thích giúp giải thuật in số nguyên tố

Em có đọc trong sách mà không hiểu gì mong mọi người giúp.

{$M 1100000}
procedure Eratosthene(N:longint);
const MAX = 1000000;
var i,j :longint;
     Prime :array [1..MAX] of byte;
begin
fillchar(Prime,sizeof(Prime),0);
for i:=2 to trunc(sqrt(N)) do
  if Prime[i]=0 then
    begin
         j:=i*i;
         while j<=N do
           begin
               Prime[j]:=1;
               j:=j+1;
         end;
    end;
for i:=2 to N do
         if Prime[i]=0 then writeln(i);
end;

Sách nó ghi là:
Cách làm được thực hiện như sau:
Trước tiên xoá bỏ số 1 ra khỏi tập các số nguyên tố. Số tiếp theo số 1 là số 2, là số
nguyên tố, xoá tất cả các bội của 2 ra khỏi bảng. Số đầu tiên không bị xoá sau số 2
(số 3) là số nguyên tố, xoá các bội của 3… Giải thuật tiếp tục cho đến khi gặp số
nguyên tố lớn hơn căn của n thì dừng lại.
Tất cả các số chưa bị xoá là số nguyên tố.

Nhưng sao em thấy code nó lại cho j = i*i rồi tăng j cho đến khi > n là sao vậy mọi người giải thích giúp em với. Thank.

rogp10 viết 16:53 ngày 01/10/2018

Nhưng sao em thấy code nó lại cho j = i*i rồi tăng j cho đến khi > n là sao vậy mọi người giải thích giúp em với. Thank.

Bởi vì nếu p * q < i^2 thì ít nhất một số p hoặc q sẽ nhỏ hơn i, tức là đã bị loại bỏ ở những bước trước đó.

Black viết 16:56 ngày 01/10/2018

Em làm được rồi. Trong sách nó ghi j = j + i em nhìn nhầm. Thank a.

Bài liên quan
0