Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Thắc mắc : Hàm Số Nguyên tố

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    27

    Mặc định Thắc mắc : Hàm Số Nguyên tố

    Mình có 2 đoạn code sau. Chỉ khác biệt đoạn
    Code:
    else
        return 1;
    trong vòng for (hàm kiểm tra số NT) Không hiều sao. Lúc có else thì kết quả sai, mà ko có else thì kết quả đúng. Các bạn giải thích giùm mình vì sao như vậy ? Có lúc mình thay return bởi lệnh gán (kq=1 hay kq=0 ) thì vẫn vậy.
    Đây là bài có else
    C Code:
    1. #include <conio.h>
    2. #include <iostream>
    3. using namespace std;
    4. #include <math.h>
    5. int kt(int a)
    6. {
    7.     int kq=0,i;
    8.     if(a==2||a==3)
    9.         return 1;
    10.     for(i=2;i<=sqrt(a);i++)
    11.     {
    12.         if (a%i==0)
    13.             return 0;
    14.         else   
    15.             return 1;
    16.     }
    17.     return kq;
    18. }
    19. void main()
    20. {
    21.     int a;
    22.     char b;
    23.     do
    24.     {
    25.     cout<<"a= ";cin>>a;
    26.     if(kt(a)==1)
    27.         cout<<a<<" la so NT\n";
    28.     else
    29.         cout<<a<<" KO la so NT\n";
    30.     cout<<"Tiep tuc (C/K) ";cin>>b;
    31.     }while (b=='C'||b=='c');
    32. }
    Đây là bài ko else
    C Code:
    1. #include <conio.h>
    2. #include <iostream>
    3. using namespace std;
    4. #include <math.h>
    5. int kt(int a)
    6. {
    7.     int kq=0,i;
    8.     if(a==2||a==3)
    9.         return 1;
    10.     for(i=2;i<=sqrt(a);i++)
    11.     {
    12.         if (a%i==0)
    13.             return 0;
    14.     }
    15.     return kq;
    16. }
    17. void main()
    18. {
    19.     int a;
    20.     char b;
    21.     do
    22.     {
    23.     cout<<"a= ";cin>>a;
    24.     if(kt(a)==1)
    25.         cout<<a<<" la so NT\n";
    26.     else
    27.         cout<<a<<" KO la so NT\n";
    28.     cout<<"Tiep tuc (C/K) ";cin>>b;
    29.     }while (b=='C'||b=='c');
    30. }
    Các bạn dễ dàng kiểm tra với số 9 10 11. Thanks
    Đã được chỉnh sửa lần cuối bởi truongphanbinh : 26-07-2008 lúc 11:14 AM.

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Code:
    for(i=2;i<=sqrt(a);i++)
        {
            if (a%i==0)
                return 0;
            else   
                return 1;
        }
    Lỗi của bài đó chính là ở chỗ này, và cũng sai chính vì else return 1;
    Lý do sai, vòng for đó đang kiểm tra thương của số đó với các số từ 2 đến căn bậc 2 của nó, nếu a chia hết cho một số i là đủ kết luận nó không nguyên tố (return 0 Nhưng nếu để kết luận là số nguyên tố thì phải duyệt hết các giá trị i, vì vậy khi bạn return 1; ngay thì mới kiểm tra với i=2 thì vòng lặp đã thoát nên kết quả bị sai.
    Cả 2 code trên mình nghĩ đều sai:
    - code 1: thì tất cả số lẻ >1 sẽ là số nguyên tố hết
    - code 2: các số >3 đều không phải số nguyên tố

    Mình sửa lại như này nhé:
    Code:
    int kt(int a)
    {
        int i;
        if(a==2||a==3)
            return 1;
        for(i=2;i<=sqrt(a);i++)
        {
            if (a%i==0)
                return 0;
        }
        return 1;
    }

  3. #3
    Ngày gia nhập
    06 2008
    Bài viết
    10

    PHP Code:
    void main()
    {
        
    int a;
        
    char b;
        do
        {
        
    cout<<"a= ";cin>>a;
        if(
    kt(a)==0)//sai o cho nay
            
    cout<<a<<" la so NT\n";
        else
            
    cout<<a<<" KO la so NT\n";
        
    cout<<"Tiep tuc (C/K) ";cin>>b;
        }while (
    b=='C'||b=='c');

    Đã được chỉnh sửa lần cuối bởi langman : 26-07-2008 lúc 11:41 PM.

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Trích dẫn Nguyên bản được gửi bởi thanhhung175 Xem bài viết
    void main()
    {
    int a;
    char b;
    do
    {
    cout<<"a= ";cin>>a;
    if(kt(a)==0)//sai o cho nay
    cout<<a<<" la so NT\n";
    else
    cout<<a<<" KO la so NT\n";
    cout<<"Tiep tuc (C/K) ";cin>>b;
    }while (b=='C'||b=='c');
    }
    Bạn thanhhung175 không đọc bài mình hay sao mà lại bảo sửa kiểu đấy, sửa vậy càng sai đó.

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi Trương Phan Bình Xem bài viết
    Mình có 2 đoạn code sau. Chỉ khác biệt đoạn
    Code:
    else
        return 1;
    trong vòng for (hàm kiểm tra số NT) Không hiều sao. Lúc có else thì kết quả sai, mà ko có else thì kết quả đúng. Các bạn giải thích giùm mình vì sao như vậy ? Có lúc mình thay return bởi lệnh gán (kq=1 hay kq=0 ) thì vẫn vậy.
    Đây là bài có else
    C Code:
    1. #include <conio.h>
    2. #include <iostream>
    3. using namespace std;
    4. #include <math.h>
    5. int kt(int a)
    6. {
    7.     int kq=0,i;
    8.     if(a==2||a==3)
    9.         return 1;
    10.     for(i=2;i<=sqrt(a);i++)
    11.     {
    12.         if (a%i==0)
    13.             return 0;
    14.         else   
    15.             return 1;
    16.     }
    17.     return kq;
    18. }
    19. void main()
    20. {
    21.     int a;
    22.     char b;
    23.     do
    24.     {
    25.     cout<<"a= ";cin>>a;
    26.     if(kt(a)==1)
    27.         cout<<a<<" la so NT\n";
    28.     else
    29.         cout<<a<<" KO la so NT\n";
    30.     cout<<"Tiep tuc (C/K) ";cin>>b;
    31.     }while (b=='C'||b=='c');
    32. }
    Đây là bài ko else
    C Code:
    1. #include <conio.h>
    2. #include <iostream>
    3. using namespace std;
    4. #include <math.h>
    5. int kt(int a)
    6. {
    7.     int kq=0,i;
    8.     if(a==2||a==3)
    9.         return 1;
    10.     for(i=2;i<=sqrt(a);i++)
    11.     {
    12.         if (a%i==0)
    13.             return 0;
    14.     }
    15.     return kq;
    16. }
    17. void main()
    18. {
    19.     int a;
    20.     char b;
    21.     do
    22.     {
    23.     cout<<"a= ";cin>>a;
    24.     if(kt(a)==1)
    25.         cout<<a<<" la so NT\n";
    26.     else
    27.         cout<<a<<" KO la so NT\n";
    28.     cout<<"Tiep tuc (C/K) ";cin>>b;
    29.     }while (b=='C'||b=='c');
    30. }
    Các bạn dễ dàng kiểm tra với số 9 10 11. Thanks
    @ trương phan bình
    bạn đang học C hay C++. Nếu C++ lên box C++ mình sẽ trả lời.
    Chỉ đơn giản là mình ở đây với vai trò giúp mọi người học C. C++ có box riêng rồi đừng pót lẫn lộn thế. châm trước cho bạn lần này

    Về bản chất bạn chưa hiểu ý nghĩa của return

    return là trả về giá trị. Tuy nhiên sau khi trả về nó sẽ kết thúc hàm >> khi gặp return hàm sẽ tự động kết thúc . OK bạn nắm được vấn đề chưa ?

    @QuangHoang : code bạn đúng rồi. Tuy nhiên ko chặt chẽ nắm. Bạn có thể tham khảo cách này đầy đủ và chắt chẽ hơn


    Nếu kiểm tra với int thì mình sẽ làm như sau :
    PHP Code:
    int nguyento(int n)
        {
            if (
    n>1)
                {
                    
    int i,j=1;
                    for (
    i=2i<= sqrt(n) ; i++ )
                            if (
    n%i==0) {j=0;break;}
                    return 
    j;
                }
            else return 
    0;
        } 
    Đã được chỉnh sửa lần cuối bởi langman : 27-07-2008 lúc 12:19 AM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    27

    Mặc định Thắc mắc : Hàm Số Nguyên tố

    oh! Xin mod vui lòng move Topic này và "Hàm số nguyên tố" vào box C++ giùm. Thanks . Sorry

Các đề tài tương tự

  1. Bài tập C Thắc mắc tính tổng dãy số nguyên tố
    Gửi bởi taxitoan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 17
    Bài viết cuối: 23-06-2013, 01:41 AM
  2. Hàm trong C++ Thắc mắc khai báo nguyên mẫu hàm như thế này nghĩa là gì?
    Gửi bởi cuatinhyeu34 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 15-11-2012, 09:25 PM
  3. Bài tập C++ chương trình đổi 1 số nguyên trong hệ thập phân sang hệ fibo và cộng 2 số nguyên được
    Gửi bởi nghiapro512 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-01-2011, 02:14 PM
  4. Hàm hoán vị 2 số nguyên, hiểu thế nào?
    Gửi bởi jumona trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 16-12-2010, 03:41 PM
  5. Bài tập C++ Đưa tất cả các số nguyên nhỏ hơn x về đầu mảng như thế nào?
    Gửi bởi mai_yeu_em1605 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 25-11-2010, 05:44 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn