Professional Documents
Culture Documents
Sáng số nguyên tố
Sáng số nguyên tố
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.