Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Tìm các số nguyên tố <N

  1. #1
    Ngày gia nhập
    01 2009
    Bài viết
    12

    Mặc định Tìm các số nguyên tố <N

    Ai sửa giúp bài này với :
    Code:
    #include<stdio.h>
    #include<math.h>
    void main()
    {
     int i,j,N;
     printf("\n Nhap vao 1 so nguyen :");
     scanf("%d",&N);
     for(j=2;j<N;j++)
     for(i=2;i<=(int)sqrt(j);i++)
      {
       if(j%i==0)
       printf("\n So %d khong la snt",j);
       else 
       printf("\n So %d la snt",j);
      }
    }

  2. #2
    Ngày gia nhập
    01 2009
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi drak77 Xem bài viết
    Ai sửa giúp bài này với :
    Code:
    #include<stdio.h>
    #include<math.h>
    void main()
    {
     int i,j,N;
     printf("\n Nhap vao 1 so nguyen :");
     scanf("%d",&N);
     for(j=2;j<N;j++)
     for(i=2;i<=(int)sqrt(j);i++)
      {
       if(j%i==0)
       printf("\n So %d khong la snt",j);
       else 
       printf("\n So %d la snt",j);
      }
    }
    sai ở trên do nếu N là số lớn hơn 9,vòng lặp sau sẽ thực hiện nhiều hơn 1 lần,và do đó với i lúc thì j chia hết,lúc thì ko cho nên hiển thị nhiều lần.
    Bạn nên xây dựng một hàm kiểm tra nguyên tố cho nó,hàm return 0 nếu ko nguyên tố ,còn lại hàm sẽ return 1 ,trong hàm main() cho j chạy từ 2 đến N-1 với mỗi j đều gọi hàm kiểm tra nguyên tố với j,nếu bằng 1 thì thông báo là nguyên tố và ko nguyên tố nếu bằng 0

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Điểm sai chính là ở chỗ này :

    C Code:
    1. if(j % i == 0)
    2.     printf("\n So %d khong la snt",j);
    3. else
    4.     printf("\n So %d la snt",j);
    ko phải cái gì cứ có if là phải có else, đôi khi ta phải linh động một chút. Đây là code mình sửa theo bài của bạn, tuy nhiên nếu dùng hàm sẽ đẹp hơn.

    C Code:
    1. #include<stdio.h>
    2. #include<math.h>
    3.  
    4. void main()
    5. {
    6.     int i,j,N;
    7.    
    8.     printf("\n Nhap vao 1 so nguyen :");
    9.     scanf("%d",&N);
    10.  
    11.     for(j=2;j<N;j++)
    12.     {
    13.         int k = (int)sqrt(j);
    14.         int flag = 1;
    15.  
    16.         for(i=2;i<=k;i++)
    17.         {
    18.             if ( j % i == 0)
    19.             {
    20.                 flag = 0;
    21.                 break;
    22.             }
    23.         }
    24.  
    25.         if (flag)
    26.             printf("%d ",j);
    27.     }
    28.  
    29.     printf("\n");
    30. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    12

    ban ơi tớ có 1 thắc mắc nếu theo vong lap for thi i bat dau =2 va j bat dau =2.Khi j=2 thi căn j =1,4 va cung luc do i=2 thi i>căn j mà theo diều kiện thì i<=sqrt(j).Bạn có thể giải thích cho tớ với ko.

  5. #5
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Thì vòng lặp đó không chạy nên flag =1 vẫn cho ra 2 là số nguyên tố.

  6. #6
    Ngày gia nhập
    01 2009
    Bài viết
    12

    Mặc định Tìm các số nguyên tố <N

    #include<stdio.h>
    #include<math.h>
    void main()
    {
    int i,j,N;
    printf("\n Nhap vao 1 so nguyen N:");scanf("%d",&N);
    for(j=2;j<=N;j++)
    {
    for(i=2;i<=sqrt(j);i++)
    {
    if(j%i==0)
    break;
    }
    if(j%i!=0)
    printf("\n So %d la snt",j);
    }
    }
    Tớ đã làm lại bài này nhưng sao nó không nhận 2 la snt vậy với lại cho tớ hỏi vì sao bài của bạn meoconlongvang lai phai co bien flag nếu không có thì sẽ không chạy đúng ????????????.Tớ mới học nên muốn hỏi các bạn đừng chê nhé!

  7. #7
    Ngày gia nhập
    01 2009
    Nơi ở
    Tân ấp - Hà Nội
    Bài viết
    20

    Phương pháp làm: Dùng phép phản chứng trong toán học.
    Giả sử các số <n, đều là số nguyên tố.(Chỉ chia hết cho 1 và chính nó).(flag=1).
    Sau đó tiến hành kiểm tra từng số một, nếu số đó còn chia hết cho một số nào khác >=2, thì chứng tỏ nó không phải là số nguyên tố (flag=0).
    Giải thuật của bài này là.
    Sau đó ta tiến hành kiểm tra lại flag, rồi printf số đó.
    Giả sử bạn tìm các số nguyên tố <5.
    Thì bạn phải đi kiểm tra từng số 1( từ 2, đến 4).
    Đầu tiên là kiểm tra với số 2, Ta giả sử nó là số nguyên tố. flag(cờ)=1(flag gán bằng 1).
    Sau đó tiến hành kiểm tra.Nếu nó không phải là số nguyên tố thì flag=0(gán bằng 0).
    Bây giờ ta tiến hành kiểm tra lại flag, nếu flag==1(số đó là số nguyên tố, và in nó ra).
    Chắc bây giờ bạn đã hiểu.
    Em còn nhớ hay em đã quên
    Nhớ Sài Gòn mưa rồi chợt nắng
    Nhớ phố xưa quen biết tên bàn chân
    Nhớ đèn đường từng đêm thao thức
    Sáng cho em vòm lá me xanh

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mình giải thích thêm khi j=2 code bạn sẽ chạy sai vì vòng for (i=2....) ko chạy nhưng biến i đã được gán trị là 2. Khi xuống dưới chỗ if, tại đó j=2 và i=2 => j chia hết cho i => 2 ko phải số nguyên tố.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    01 2009
    Bài viết
    12

    Có phải 0 là đại diện cho sai và 1 là đại diện cho đúng không hả bạn ?/???.Cái lệnh này cho tớ hỏi nữa :
    if (flag)
    printf("%d ",j);
    sao chương trình lại biết flag là phép chia giữa j%i để xét điều kiện đó.Mong các bạn giúp nhé

  10. #10
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Nếu đúng như lời meoconlongvang nói thì chương trình đó chạy không đúng bởi vì 2 là số nguyên tố mà.
    Thôi thì bạn chạy thử code của mình đảm bảo chạy ngon.
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    int ktnt(int n)
    {
        
    int k=1;
        for(
    int i=2;i<=sqrt(n);i++)
        {
            if(
    n%i==0)
            {
                
    k=0;break;
            }
        }
        return 
    k;
    }
    main()
    {
        
    int n;
        
    printf("\nNhap n = ");
        
    scanf("%d",&n);
        for(
    int i=2;i<n;i++)
        {
            if(
    ktnt(i)==1printf("%d\t",i);
        }
        
    getch();


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

  1. Bài tập C giải thuật nhập vào số nguyên n in ra n số nguyên tố đầu tiên?
    Gửi bởi LTC trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 48
    Bài viết cuối: 25-04-2013, 07:40 PM
  2. Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên.
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 19-06-2011, 01:05 PM
  3. Game Viết chương trình nhập số nguyên dương n, liệt kê n số nguyên tố đầu tiên trên C#?
    Gửi bởi maiit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 08-06-2011, 11:12 PM
  4. 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
  5. Lập trình C xin code cài đặt thuật toán sàng nguyên tố để liệt kê các số nguyên tố 2->480000
    Gửi bởi ngocdung_088 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 06-12-2010, 11:53 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