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: Nhập vào một số nguyên N và xuất ra các số nguyên tố <N

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

    Mặc định Nhập vào một số nguyên N và xuất ra các số nguyên tố <N

    Mong mọi người hướng dẫn em cách làm bài này với ạ.
    Em chỉ mới làm được phần kiểm tra xem số N có phải là số nguyên tố hay không chứ không làm được việc nhập vào một số N và xuất ra các số nguyên tố <N :9


    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. void main()
    4. {
    5.     long n,i,result;
    6.     clrscr;
    7.     printf("\nNhap so N = ");
    8.     scanf("%ld",&n);
    9.     result=1;
    10. if(n<2)
    11. result=0;
    12. else
    13. {
    14.     long cann=sqrt(n);
    15.     for(i=2;i<=cann;i++)
    16.     if(n%i==0)
    17.     {
    18.     result=0;
    19.     break;
    20.     }
    21. if(result==1)
    22. printf("\nN la so nguyen to");
    23. else
    24. printf("\nN khong la so nguyen to");
    25. }
    26. getch();
    27. }

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

    Trích dẫn Nguyên bản được gửi bởi xitrum5393 Xem bài viết
    Mong mọi người hướng dẫn em cách làm bài này với ạ.
    Em chỉ mới làm được phần kiểm tra xem số N có phải là số nguyên tố hay không chứ không làm được việc nhập vào một số N và xuất ra các số nguyên tố <N :9


    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. void main()
    4. {
    5.     long n,i,result;
    6.     clrscr;
    7.     printf("\nNhap so N = ");
    8.     scanf("%ld",&n);
    9.     result=1;
    10. if(n<2)
    11. result=0;
    12. else
    13. {
    14.     long cann=sqrt(n);
    15.     for(i=2;i<=cann;i++)
    16.     if(n%i==0)
    17.     {
    18.     result=0;
    19.     break;
    20.     }
    21. if(result==1)
    22. printf("\nN la so nguyen to");
    23. else
    24. printf("\nN khong la so nguyen to");
    25. }
    26. getch();
    27. }
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. int songuyento(int  a);
    4. main()
    5. {
    6.   int n,i=0;
    7.   printf("\n nhap vao mot so nguyen duong n");
    8.   scanf("%d",&n);
    9.   if (n<=1)
    10.   printf("\n khong ton tai so nguyen to nao <=n");
    11.   if (n>=2)
    12.   printf("\n nhung so nguyen to <=%d la ",n);
    13.   for (i=2;i<=n;i++)
    14.     if (songuyento(i))
    15.     printf("%3d",i);
    16.   getch();
    17. }
    18. int songuyento(int a)
    19. {
    20.     int i,k=0;
    21.     for(i=1;i<=a;i++)
    22.       if (a%i==0) k++;
    23.       if (k>2) return 0;
    24.       else return 1;
    25. }
    Ý tương mình là xét 1 hàm số nguyên tố (i)
    Dễ thấy nếu i là nguyên tố thì i sẽ có 2 ước là 1 và i
    Ta sẽ gán 1 biến k =0 và 1 biến j chạy từ 1 đến i
    và nếu k>2 tuc là i là hợp số
    ko thì i là nguyên tố

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Hàm kiểm tra số nguyên tố mình sửa lại một tí
    C Code:
    1. int songuyento(int a)
    2. {
    3.     int i;
    4.     if (a<2) return 0;//Nếu a<2 thì a không là số nguyên tố
    5.     for(i=2;i<=sqrt(a);i++) /*Số a luôn có 2 ước là 1 và chính nó (vì a>=2) nên chỉ cần xem a có chia hết cho số nào trong khoảng [2,sqrt(a)] */
    6.       if (a%i==0) return 0;//Nếu a chia hết cho số nào trong khoảng trên thì a không là số nguyên tố
    7.     return 1;//nếu a không chia hết cho số nào trong khoảng trên thìa là số nguyên tố
    8. }
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

  4. #4
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Chỗ này hơi khó hiểu, các bro giải thích giúp em được không ạ, phần gọi hàm ấy

    C Code:
    1. printf("\n Cac so nguyen to <=%d la ",n);
    2.   for (i=2;i<=n;i++)
    3.     if (songuyento(i))
    4.     printf("%5d",i);
    5.   getch();
    6. }
    Đã được chỉnh sửa lần cuối bởi xitrum5393 : 14-10-2011 lúc 10:46 PM.

  5. #5
    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 nguyenphuongcntv Xem bài viết
    Hàm kiểm tra số nguyên tố mình sửa lại một tí
    Code:
    int songuyento(int a)
    {
        int i;
        if (a<2) return 0;//Nếu a<2 thì a không là số nguyên tố
        for(i=2;i<=sqrt(a);i++) /*Số a luôn có 2 ước là 1 và chính nó (vì a>=2) nên chỉ cần xem a có chia hết cho số nào trong khoảng [2,sqrt(a)] */
          if (a%i==0) return 0;//Nếu a chia hết cho số nào trong khoảng trên thì a không là số nguyên tố
        return 1;//nếu a không chia hết cho số nào trong khoảng trên thìa là số nguyên tố
    }
    Tất cả các so sánh có dấu bằng liên quan đến số thực, và ép kiểu thực sang int đều cần phải rất cẩn thận. Mình thường viết:
    C Code:
    1. int imax = 0.01 + sqrt(a);
    2. for (i = 2; i <= imax; ++i)....
    Lý do: Như 1 số thread đã nói, các số nguyên có thể là vô tỷ đối với cách lưu trữ của số thực. 1 compiler nào đó hoàn toàn có thể tính sqrt(25) thành 4.99999999999(rất nhiều số 9 - trong đó có 2 tầng có thể tạo ra sai số, 1 tầng do phép tính căn và 1 tầng do cách lưu trữ số thực) và khi ép về int sẽ ra 4!!! Nếu không cẩn thận, code có thể chạy đúng trên compiler của bạn nhưng không có gì đảm bảo sẽ đúng trên compiler khác.

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

    Mặc định Nhập vào một số nguyên N và xuất ra các số nguyên tố <N

    Trích dẫn Nguyên bản được gửi bởi xitrum5393 Xem bài viết
    Chỗ này hơi khó hiểu, các bro giải thích giúp em được không ạ, phần gọi hàm ấy

    C Code:
    1. printf("\n Cac so nguyen to <=%d la ",n);
    2.   for (i=2;i<=n;i++)
    3.     if (songuyento(i))
    4.     printf("%5d",i);
    5.   getch();
    6. }
    Ở dươi mình đã giải thích hàm rồi đấy.
    Ở đây ilaf số nguyên tố thì đương nhiên nó phải bắt đầu từ 2.i ở đây tương đương với a ở dứoi .Bạn gán hàm vào số i mà thôi

  7. #7
    Ngày gia nhập
    09 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Tất cả các so sánh có dấu bằng liên quan đến số thực, và ép kiểu thực sang int đều cần phải rất cẩn thận. Mình thường viết:
    C Code:
    1. int imax = 0.01 + sqrt(a);
    2. for (i = 2; i <= imax; ++i)....
    Lý do: Như 1 số thread đã nói, các số nguyên có thể là vô tỷ đối với cách lưu trữ của số thực. 1 compiler nào đó hoàn toàn có thể tính sqrt(25) thành 4.99999999999(rất nhiều số 9 - trong đó có 2 tầng có thể tạo ra sai số, 1 tầng do phép tính căn và 1 tầng do cách lưu trữ số thực) và khi ép về int sẽ ra 4!!! Nếu không cẩn thận, code có thể chạy đúng trên compiler của bạn nhưng không có gì đảm bảo sẽ đúng trên compiler khác.
    Uh.Bạn nói phải.Chỗ đoạn sửa là OK

  8. #8
    Ngày gia nhập
    08 2011
    Nơi ở
    Trà Vinh
    Bài viết
    20

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Tất cả các so sánh có dấu bằng liên quan đến số thực, và ép kiểu thực sang int đều cần phải rất cẩn thận. Mình thường viết:
    C Code:
    1. int imax = 0.01 + sqrt(a);
    2. for (i = 2; i <= imax; ++i)....
    Lý do: Như 1 số thread đã nói, các số nguyên có thể là vô tỷ đối với cách lưu trữ của số thực. 1 compiler nào đó hoàn toàn có thể tính sqrt(25) thành 4.99999999999(rất nhiều số 9 - trong đó có 2 tầng có thể tạo ra sai số, 1 tầng do phép tính căn và 1 tầng do cách lưu trữ số thực) và khi ép về int sẽ ra 4!!! Nếu không cẩn thận, code có thể chạy đúng trên compiler của bạn nhưng không có gì đảm bảo sẽ đúng trên compiler khác.
    Nếu như vậy, tại sao không cộng thêm 0.1 hay 0.001 mà lại cộng thêm 0.01. bạn có thể giải thích thêm chỗ này được không (vì vấn đề này nào giờ mình chưa gặp phải) hoặc có tài liệu cụ thể cho mình đọc thì càng tốt. cảm ơn bạn trước nha!!!!!!!!!
    Nó là con của thằng nào ? Con của thằng nào ? Nói mau!!!!!!!!!!!!!!!

  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 nguyenphuongcntv Xem bài viết
    Nếu như vậy, tại sao không cộng thêm 0.1 hay 0.001 mà lại cộng thêm 0.01. bạn có thể giải thích thêm chỗ này được không (vì vấn đề này nào giờ mình chưa gặp phải) hoặc có tài liệu cụ thể cho mình đọc thì càng tốt. cảm ơn bạn trước nha!!!!!!!!!
    Tài liệu thì bạn có thể search về cách lưu trữ số thực, ví dụ http://en.wikipedia.org/wiki/Double_...g-point_format.
    Nhưng trên forum này đã có những bạn thắc mắc đại loại khi in ra (int)x*x, với x = 5.0 thì lại ra 24 hay cái gì đó tương tự (không nhớ chính xác). Mình cũng mấy lần gặp những trường hợp củ chuối như khi tính cos_x = sqrt(1 - sin_x*sin_x) thì bị lỗi vì khi sin(x) ra 1, sin_x*sin_x lại ra 1 số 1.0000...0000001 nào đó và không tính căn được vì biểu thức trong căn là số âm dù chỉ là âm tí tí tẹo hoặc thậm chí -0 (số thực lưu trữ 0 và -0 là 2 số khác nhau)

    Còn trong trường hợp cụ thể trên thì 0.1, 0.01 hay 0.00001 cũng đều được. Theo kinh nghiệm thì số float ít khi tạo ra sai số lớn hơn 1e-5, còn số double thì ít khi tạo ra sai số lớn hơn 1e-8 trong miền số hay dùng. Tất nhiên nếu bạn dùng số double lưu số 10^100 chẳng hạn, thì sai số có thể lên đến vài tỷ tỷ tỷ cũng nên.

  10. #10
    Ngày gia nhập
    09 2011
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi CTK41 Xem bài viết
    Ở dươi mình đã giải thích hàm rồi đấy.
    Ở đây ilaf số nguyên tố thì đương nhiên nó phải bắt đầu từ 2.i ở đây tương đương với a ở dứoi .Bạn gán hàm vào số i mà thôi
    Cám ơn bro ạ, em đã hiểu rồi

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

  1. Mảng trên C Có 2 số nguyên nhập vào mảng tìm số lần xuất hiện trong mảng
    Gửi bởi o0mickey0o trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 14-11-2012, 05:02 PM
  2. Bài tập C++ Lồng hàm KT số nguyên tố trog hàm xuất nguyên tố
    Gửi bởi huy9810814 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 17-01-2011, 08:00 PM
  3. Bài tập C++ nhập mảng gồm n (5<n<10) phần tử, xuất mảng và xuất ra các số nguyên tố của mảng
    Gửi bởi viettan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 08-01-2011, 10:23 PM
  4. Bài tập c: nhập,xuất một số nguyên lớn
    Gửi bởi nguyenthanhhai90vp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 11-11-2010, 12:09 AM
  5. [C] Nhập vào một số nguyên, xuất ra số La Mã
    Gửi bởi hirikarate trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 08-04-2007, 05:32 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