Đây là bài tập kiểm tra N nhập vào có phải SNT ko,mình làm thế này nhưng ko chạy đc chương trình,các bạn giúp m vs: (Quá trình gán p chỉ để nhanh hơn so với duyệt từ 2~n-1 thôi)
- Thứ nhất, chỉ cần duyệt tới phần nguyên của căn N.
- Thứ hai, for i := 2 to p/2 là sai. Vì p/2 là kiểu thực, không sử dụng được trong for.
- Thứ ba, thuật toán bị sai. Cuối cùng phải kiểm tra S = 0 thì N nguyên tố và ngược lại, chứ không phải như bạn làm.
Sửa lại:
Mã:
var
N, i, p, S: integer;
begin
write('Nhap N: '); readln(N);
p := trunc(sqrt(N));
S := 0;
for i := 2 to p do
begin
if N mod i = 0 then S := S + i;
end;
if S = 0 then
write(N, ' La SNT')
else
write(N, ' Khong Phai SNT');
readln
end.
[SIZE="1"][FONT="Courier New"]uses crt;
var f : boolean;
n,i : integer;
begin
clrscr;
f:=true;
Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
If n=1 then f:=false
else for i:=2 to trunc(sqrt(n)) do
If n mod i=0 then
begin
f:=false;
break;
end;
If f=true then Write('Số vừa nhập là số nguyên tố')
else Write('Số vừa nhập không phải số nguyên tố');
readln
end.[/FONT][/SIZE]
uses crt;
var f : boolean;
n,i : integer;
begin
clrscr;
f:=true;
Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
If n=1 then f:=false
else for i:=2 to trunc(sqrt(n)) do
If n mod i=0 then
begin
f:=false;
break;
end;
If f=true then Write('Số vừa nhập là số nguyên tố')
else Write('Số vừa nhập không phải số nguyên tố');
readln
end.
var
f : boolean;
n, i : integer;
begin
f := true;
Write('nhập vào số cần kiểm tra tính nguyên tố >>>');readln(n);
If n = 1 then
f := false
Else
For i:=2 to trunc(sqrt(n)) do If n mod i = 0 then
Begin
f :=false;
break;
End;
If f then
Write('Số vừa nhập là số nguyên tố')
else
Write('Số vừa nhập không phải số nguyên tố');
end.
P.s: Lưu ý không dùng size chữ quá lớn, dễ gây mất thiện cảm