-
07-05-2009, 05:03 AM #1
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 1
Chương trình con kiểm tra 1 số có là số nguyên tố hay không
Các bạn hãy viết các cách để kiểm tra 1 số có là số nguyên tố hay không (dùng chương trình con.
Trong nhiều sách mình thấy dùng hàm sau nhưng mình chạy với số 1 thì in ra là số nguyên tố. Các bạn đọc và cho ý kiến nhé
Function ngto(N:integer):Boolean;
Var i:integer;
Begin
ngto:=false;
For i:=2 to trunc(sqrt(N)) do
if N mod i = 0 then exit;
ngto:=true;
End;
-
07-05-2009, 09:35 PM #2
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
Mình đã hiểu phải sửa lại chương trình trên như sau:
Mã:Function ngto(N:integer):boolean; Var i:integer; Begin ngto:=false; For i:=2 to trunc(sqrt(N) ) do if N mod i=0 then exit; ngto:=N>1; End; Mình đã hiểu vì sao đoạn CTC trên chạy lại cho kết quả 1 là số nguyên tố vì với N=1 ban đầu ngto:=false Sau đó thì vòng for không được thực hiện vì i chạy từ 2 đến... vì vậy không có lệnh Exit thoát khỏi chương trình con. Và cuối cùng hàm ngto lại gán bằng true ngto:=true. Vậy 1 sẽ là số nguyên tố.Cần sửa lại như trên
-
07-06-2009, 08:18 PM #3
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 2
Hay lắm, cái này mình cũng mới học, không hiểu vì sao hết
-
07-06-2009, 09:35 PM #4
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 6
c¸i ®Êy rë ch¹y c¸i nµy nµy
function ktnt(i:integer):boolean;
dem:=0;
for j:=1 to i do
if i mod j = 0 then inc(dem);
if dem=2 then ktnt:=true else ktnt := false;
end;
-
07-06-2009, 10:24 PM #5
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 3
Gửi bởi lehang_gb1
-
07-07-2009, 02:41 AM #6
Silver member
- Ngày tham gia
- Aug 2015
- Bài viết
- 314
Gửi bởi khanh tinh
Với những số lớn thì thuật toán này không tối ưu.
-
07-11-2009, 09:41 AM #7
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 1
Gửi bởi lehang_gb1
Mã:Hay lắm, tui thích nhất cái khoản ngto:=N>1; vừa gọn vừa dễ nhìn
-
07-17-2009, 03:19 PM #8
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 3
Gửi bởi SHINICHI-KID
Ah biểu thức N>1 nghĩa là True với N > =2. ĐÚng rồi
-
08-22-2009, 04:00 AM #9
Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 4
Mình đưa ra 1 đoạn chương trình, bạn tự viết vào mođun nha:
i:=2;
while a{số cần kt} mod i<>0 then inc(i);
if a=i then true else false.
:shifty:
Có gì sai sót xin chỉ bảo:emlaugh:
-
09-10-2009, 11:02 PM #10
Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 0
procedure KT(x:integer);
var d,i:integer;
begin
d:=0;
for i:=2 to x-1 do
if x mod i=0 then d:=d+1;
if d=0 then write(x,'la so nguyen to') else write(x,'k la so nguyen to');
end;
Xe nâng người Boom lift được Công Ty TNHH Trung thành phân phối chính hãng tại khu vực phía Bắc. Với chi phí đầu tư ban đầu thấp hơn rất nhiều so với các loại xe nâng dầu , xe nâng động cơ loại...
Xe nâng người được trung thành nhập khẩu giá tốt