Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 15
  1. #1
    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;

  2. #2
    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

  3. #3
    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

  4. #4
    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;

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    3
    Trích dẫn Gửi bởi lehang_gb1
    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;
    thêm cái dk if n<2 then exit . Cái này đâu phải kĩ thuật lập trình .

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    314
    Trích dẫn Gửi bởi khanh tinh
    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;
    Đây là thuật toán cơ bản nhưng thuật toán này chạy lâu lắm.
    Với những số lớn thì thuật toán này không tối ưu.

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    1
    Trích dẫn Gửi bởi lehang_gb1
    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
    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
    [/QUOTE]

  8. #8
    Ngày tham gia
    Nov 2015
    Bài viết
    3
    Trích dẫn Gửi bởi SHINICHI-KID
    Hay lắm, tui thích nhất cái khoản ngto:=N>1; vừa gọn vừa dễ nhìn
    Nhưng mà khó hiểu vì ngto nhận kiểu Boolean mà N lại là số.
    Ah biểu thức N>1 nghĩa là True với N > =2. ĐÚng rồi

  9. #9
    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:

  10. #10
    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;

Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •