You are on page 1of 2

program SieveOfEratosthenes; const

const nmax=1000;
MAX = 1000000; var
SNT:array[0..nmax+1] of boolean;
var
primes: array[2..MAX] of Boolean; procedure sangnt;
i, j, n: Integer; var i,j:longint;
begin
begin fillchar(snt,sizeof(snt),true);
Write('Nhap n: '); snt[1]:=false;
ReadLn(n); i:=2;
while i<=trunc(sqrt(nmax)) do
// Khởi tạo mảng primes ban đầu là begin
True while snt[i]=false do
for i := 2 to n do inc(i);
primes[i] := True; for j:=2 to nmax div i do
snt[i*j]:=false;
// Loại bỏ các bội số của các số nguyên
inc(i);
tố
end;
for i := 2 to Trunc(Sqrt(n)) do
begin for i:=1 to nmax do
if primes[i] then if snt[i]=true then
begin write(i,' ');
j := i * i; end;
while j <= n do
begin begin
primes[j] := False; sangnt;
j := j + i; readln;
end; end.
end;
end;

// In ra các số nguyên tố
WriteLn('Cac so nguyen to nho hon
hoac bang ', n, ':');
for i := 2 to n do
begin
if primes[i] then
Write(i, ' ');
end;
end.
 prime là một mảng Boolean lưu trữ thông tin về số nguyên tố. Ban đầu,
tất cả các phần tử của mảng đều được thiết lập là True.
 Vòng lặp đầu tiên từ 2 đến n được sử dụng để thiết lập tất cả các giá trị
ban đầu của prime là True.
 Vòng lặp thứ hai từ 2 đến căn bậc hai của n được sử dụng để loại bỏ các
số không phải số nguyên tố. Nếu prime[i] là True, thì ta biết rằng i là số
nguyên tố, vì vậy ta sẽ loại bỏ tất cả các bội số của i (từ i * i đến n) bằng
cách thiết lập giá trị tương ứng của prime thành False.
 Vòng lặp cuối cùng từ 2 đến n được sử dụng để hiển thị tất cả các số
nguyên tố được tìm thấy. Nếu prime[i] là True, thì i là số nguyên tố và ta
in nó ra.

You might also like