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ố 14 kết quả

Đề tài: Tìm và in ra tất cả các số nguyên tố < n

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

    Mặc định Tìm và in ra tất cả các số nguyên tố < n

    Anh chi xem giup em sao code chay ko ra ket quả.



    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    int a[5],i,n,j,dem;
    printf("\n nhap n:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
    printf("\n a[%d]:",i);
    scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
    dem=0;
    for(j=1;j<=i;j++)
    {
    if(a[i]%j==0)
    dem=dem+1;
    }
    }
    if(dem==2)
    printf("\n a[%d]:%d",i,a[i]);
    getch();
    }

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

    Lần sau post nhớ để code vào trong thẻ tag nha bạn. Thứ nhất, code của bạn ko phải in các số nguyên tố nhỏ hơn n, mà nhập vào 1 dãy các số nguyên, rồi in ra các số nguyên tố trong dãy vừa nhập, code bạn ko in ra được vì phần printf("\n a[%d]:%d",i,a[i]); ko nằm trong khối lệnh, thì kết quả biến dem trả về ko có làm sao đem ra so sánh. Đây là code của bạn mình đã sửa lại giúp bạn.
    C++ Code:
    1. #include "stdio.h"
    2.  
    3. int check(int a)
    4. {
    5.     int count = 0;
    6.     for(int i = 1; i <= a; i++)
    7.         if((a % i) == 0)
    8.             count++;
    9.     if(count <= 2)
    10.         return 1;
    11.     else return 0;
    12. }
    13.  
    14. int main()
    15. {
    16.     int a[5], n;
    17.     printf("Nhap vao so phan tu: ");
    18.     scanf("%d", &n);
    19.     for(int i = 0; i < n; i++)
    20.         {
    21.             printf("Nhap vao phan tu [%d]: ", i + 1);
    22.             scanf("%d", &a[i]);
    23.         }
    24.     for(int i = 0; i < n; i++)
    25.         if(check(a[i]) == 1)
    26.             printf("%d\n", a[i]);
    27.     return 0;
    28. }
    Còn đây là code in ra các số nguyên tố nhỏ hơn n
    C++ Code:
    1. #include "stdio.h"
    2.  
    3. int check(int a)
    4. {
    5.     int count = 0;
    6.     for(int i = 1; i <= a; i++)
    7.         if((a % i) == 0)
    8.             count++;
    9.     if(count <= 2)
    10.         return 1;
    11.     else return 0;
    12. }
    13.  
    14. int main()
    15. {
    16.     int temp = 1, n;
    17.     printf("Nhap vao n ");
    18.     scanf("%d", &n);
    19.     while(temp <= n)
    20.     {
    21.         if(check(temp) == 1)
    22.             printf("%d\n", temp);
    23.         temp++;
    24.     }
    25.     return 0;
    26. }

  3. #3
    Ngày gia nhập
    10 2011
    Nơi ở
    /
    Bài viết
    26

    Bạn tham khảo nhé:
    C Code:
    1. /*programming print out prime number smaller than n*/
    2. #include<stdio.h>
    3. #include<math.h>
    4. int main(int argc, char* argv[])
    5. {
    6.     int i,j,n;
    7.     printf("enter n:\n");
    8.     scanf("%d",&n);
    9.     printf("prime numbers are:\n");
    10.     for(i=3;i<n;i++)
    11.     prime(i,j);
    12.     printf("\n");
    13. }
    14. int prime(int i, int j)/*function check prime number*/
    15. {
    16.     int test=0;
    17.     for(j=2;j<=sqrt(i);j++)
    18.         if(i%j==0)
    19.         test=1;
    20.     if(!test)
    21.         printf("%2d\n",i);
    22. }

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi dailammoc Xem bài viết
    Bạn tham khảo nhé: đây là bạn kêu gọi tham khảo nhé, chớ có tự ái
    Code:
    /*programming print out prime number smaller than n*/ 
    #include<stdio.h>
    #include<math.h>
    int main(int argc, char* argv[])
    {
    	int i,j,n;
    	printf("enter n:\n");
    	scanf("%d",&n);
    	printf("prime numbers are:\n");
    	for(i=3;i<n;i++)
    	prime(i,j);
    	printf("\n");
    }
    int prime(int i, int j)/*function check prime number*/
    1. hàm này không chỉ check, nó cũng in ra nữa, không nói rõ đọc rất khó hiểu
    2. tham j nhập vào hoàn toàn thừa
    3. biến test cũng thừa, nếu i chia chẵn j thì return là xong
    4. hàm này không return cái gì cả, đáng lẽ phải là hàm void
    {
    	int test=0;
    	for(j=2;j<=sqrt(i);j++)
    		if(i%j==0)
    		test=1;
    	if(!test)
    		printf("%2d\n",i);
    }
    kết luận, hàm viết quá cẩu thả

  5. #5
    Ngày gia nhập
    10 2011
    Nơi ở
    /
    Bài viết
    26

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    kết luận, hàm viết quá cẩu thả
    Thanks bạn, nói thật là mình vừa mới học C, trình độ chỉ vừa đến mức chạy được chương trình, hàm cũng chỉ mới học qua, nên có nhiều lỗi. Nói thế không phải để biện hộ, đưa code lên là để bạn chủ thớt tham khảo, đồng thời cũng để các cao thủ chỉ giáo thêm, không có gì phải tự ái cả. Quay lại hàm prime trước mình vốn làm thế này:
    C Code:
    1. int prime(int i, int j)/*function check prime number*/
    2. {
    3.     for(j=2;j<=sqrt(i);j++)
    4.         if(i%j!=0)
    5.         return 0;
    6.     return 1;
    7. }
    nhưng chương trình của mình không chạy, nên mới phải cho biến test vào. Chỉ cho mình chỗ sai với??!

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

    Mặc định Tìm và in ra tất cả các số nguyên tố < n

    Trích dẫn Nguyên bản được gửi bởi dailammoc Xem bài viết
    Thanks bạn, nói thật là mình vừa mới học C, trình độ chỉ vừa đến mức chạy được chương trình, hàm cũng chỉ mới học qua, nên có nhiều lỗi. Nói thế không phải để biện hộ, đưa code lên là để bạn chủ thớt tham khảo, đồng thời cũng để các cao thủ chỉ giáo thêm, không có gì phải tự ái cả. Quay lại hàm prime trước mình vốn làm thế này:
    C Code:
    1. int prime(int i, int j)/*function check prime number*/
    2. {
    3.     for(j=2;j<=sqrt(i);j++)
    4.         if(i%j!=0)
    5.         return 0;
    6.     return 1;
    7. }
    nhưng chương trình của mình không chạy, nên mới phải cho biến test vào. Chỉ cho mình chỗ sai với??!
    Bạn xem kỹ lại về lệnh và khối lệnh nhé, cái đó là căn bản nhất trong C mà bạn vẫn chưa nắm được. Code của bạn luôn trả về giá trị 1. Còn lý do tại sao thì bạn nên học lại, mà mình thấy cách kiểm tra số nguyên tố của bạn ko ổn lắm, nếu giá trị nhập vào nhỏ hơn 2 thì sao? Hàm của bạn có thêm tham số j là quá dư thừa. Đúng là bạn chỉ có thể chạy code, còn đọc và hiểu code có lẽ cần cố gắng hơn
    Code is more than binary. Its poetry

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    if (i%j != 0)
    Cái này dịch ra là "nếu i không chia chẵn cho j"
    Vì vậy bạn return 0 là sai thuật toán.
    Đáng lẽ phải là
    if (i%j == 0) // nếu i chia chẵn cho j, số không phải là nguyên tố, lúc đó return 0 mới đúng

    Về biến j, bên trong hàm chỉ cần khai báo
    int j; // j là biến nội của hàm
    Là được rồi, không cần bỏ nó làm tham số

  8. #8
    Ngày gia nhập
    10 2011
    Nơi ở
    /
    Bài viết
    26

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    if (i%j != 0)
    Cái này dịch ra là "nếu i không chia chẵn cho j"
    Vì vậy bạn return 0 là sai thuật toán.
    Đáng lẽ phải là
    if (i%j == 0) // nếu i chia chẵn cho j, số không phải là nguyên tố, lúc đó return 0 mới đúng

    Về biến j, bên trong hàm chỉ cần khai báo
    int j; // j là biến nội của hàm
    Là được rồi, không cần bỏ nó làm tham số
    À gõ nhầm đúng ra là
    C Code:
    1. if(i%j!=0)
    2.       return 1;
    3. return 0;
    vậy là hàm prime chỉ cần tham số i là đủ, ok để mình thử lại. Thanks nhiều!!!

  9. #9
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi dailammoc Xem bài viết
    À gõ nhầm đúng ra là
    C Code:
    1. if(i%j!=0)
    2.       return 1;
    3. return 0;
    vậy là hàm prime chỉ cần tham số i là đủ, ok để mình thử lại. Thanks nhiều!!!
    Cũng sai luôn. Phải là
    C Code:
    1. for...
    2.       if(i%j==0)
    3.             return 0;
    4. return 1;

  10. #10
    Ngày gia nhập
    01 2010
    Nơi ở
    Nha Trang
    Bài viết
    1

    Thay vì dùng kiểu int cho hàm prime, bạn cũng có thể dùng kiểu bool, khi đó 1 sẽ là true, 0 sẽ là false. Các bài tập dạng này được viết rất chi tiết, dễ hiểu trong cuốn sách "C++ without fear, 2nd edition. A beginer's guide that makes you feel smart" của tác giả Brian Overland. Sách này có thể dễ dàng tải trên Google.

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