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

Đề tài: Code về số nguyên tố. Giúp em sửa

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Unhappy Code về số nguyên tố. Giúp em sửa

    Làm mãi vẫn cứ sai !!rất tiếc là xung quanh gần nhà ko có ai để học hỏi!!
    Đây là bài làm:
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void main(){
    int i,n,j;
    int nto=1;
    clrscr();
    printf"(\n nhap vao mot gia tri so :");
    scanf("%d",&n);
    printf("\n cac so nguyen to tu 1 den %d la %d",n,2);
    for(i=3;i<n;i++);
    {
    for(j=2;j<=sqrt(i);j++)
    {
    if(i%j==0) nto=0;break;
    }
    if(nto==1) printf("%d",i);
    else nto=1;
    }
    printf("\n");
    getch();
    }
    sau khi chạy chương trình xong:
    nó như thế này:
    nhap vao mot gia tri so:15 /* em nhập là 15 nhé */

    Cac so nguyen to tu 1 den 15 la 2 3 5 7 9 11 13
    =====>>>sai bét!!!
    các số kia thì đúng là nguyên tố thật, nhưng mà số 9 đâu phải là nguyên tố ???
    các Pro chỉ em cách sửa nhé !!Thank nhìu!!

    ------
    Nhắc nhở: Đặt code vào tag. ht961711
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 27-11-2007 lúc 03:51 PM.
    Chữ Ký Của DầuCùLàY(:`) :

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    đà nẵng
    Bài viết
    0

    for(i=3;i<n;i++);
    sai là đúng rùi.. vì 3 xong thì i-> 5 rùi thành 7, 9, 11...
    còn sửa chỗ nào thì chịu, tui hok bik

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

    Trích dẫn Nguyên bản được gửi bởi DầuCùLà Xem bài viết
    printf"(\n nhap vao mot gia tri so :");
    for(i=3;i<n;i++);
    Thế mà chương trình vẫn chạy được thì pó tay bạn roài.
    Đã được chỉnh sửa lần cuối bởi tuna : 27-11-2007 lúc 01:51 PM.

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

    Trích dẫn Nguyên bản được gửi bởi DầuCùLà Xem bài viết
    for(j=2;j<=sqrt(i);j++)
    {
    if(i%j==0) nto=0;break;
    }
    bạn sửa lại thế này thì sẽ đúng:
    if (i%j==0)
    {
    nto=0;break;
    }

    OK!!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Ko đúng rồi tuna ơi!!! nó báo lỗi ngay ở dấu ";" sau "break" !!
    cách này có vẻ ko được khả thi cho lắm!!
    nhưng dù sao cũng cảm ơn !!!mem......
    Chữ Ký Của DầuCùLàY(:`) :

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Code về số nguyên tố. Giúp em sửa

    Thuật toán của bạn đúng mà ?

    nhap vao mot gia tri so :20
    3
    5
    7
    11
    13
    17
    19
    Lỗi chỗ này :
    for(i=3;i<n;i++);
    có dấu này ";" thì i lúc xuống for 2 là 100 !!!!

    Cái này là sàng Eratosthenes, vòng for đầu sữa lại 1 tí thôi cho nó xét ít hơn :
    for(i = 3; i < n; i += 2)
    số chẳn không phải là số nguyên tố !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 27-11-2007 lúc 03:50 PM.

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Sao lại không có số 2 vậy Rox Rook??
    tui thử thay rồi.. còn cái chỗ lỗi sai là lúc nãy viết nhầm....
    Chưa sử dụng quen Dev C++ .....
    Chữ Ký Của DầuCùLàY(:`) :

  8. #8
    Ngày gia nhập
    11 2007
    Bài viết
    40

    Đây là bài làm:
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void main(){
    int i,n,j;
    int nto=1;
    clrscr();
    printf"(\n nhap vao mot gia tri so :");
    scanf("%d",&n);
    printf("\n cac so nguyen to tu 1 den %d la %d",n,2);
    for(i=3;i<n;i+=2);// Dư dấu ;
    {
    for(j=2;j<=sqrt(i);j++)
    {
    if(i%j==0) 
       // Chỗ này cho thêm ngoặc vào, không thì break là của for chứ không fải của if 
       {
         nto=0;
         break;
       }
    }
    if(nto==1) printf("%d",i);
    else nto=1;
    }
    printf("\n");
    getch();
    }
    Bạn coi lại chỗ mình để chữ đỏ nhé.
    Bạn làm thuật toán đúng rồi nhưng cú pháp lộn xộn thôi. Còn cái vòng for đầu tiên như bạn rox_rook nói đúng rồi đó. Sàng Eratosthenes giúp mình loại trừ các số chẵn đi thì làm ctrình chạy nhanh hơn.
    Regards,

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

    Thuật toán thì ổn. nhưng khi bạn dùng break thì ngay lần kiểm tại j=2 đã làm vòng for thoát xuống rồi như thế mục đích kiểm tra của bạn chưa như bạn mong muốn là cho kiểm từ 2->sqrt(i). cách sữa như mấy bạn đã làm.đưa break xuống là ổn. Nhưng không biết cái vụ i+=2 làm chương trình chạy hơn bao nhiu nhưng được cái là tối ưu hơn đó.
    (=D)> (:=(|) Luôn mong muốn mình sẽ pro hơn hahahha(:#) (:#)

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    1

    Cảm ơn các pác nhiều!!!
    Công nhận là mình ngu quá là ngu.... thiếu dấu ngoặc mà cũng ko biết !!!
    cái dấu ";" ở trên là em ghi nhầm !
    Thank tất cả các pác...đặc biệt là bác Hung.Tran
    Chữ Ký Của DầuCùLàY(:`) :

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

  1. Viết hàm đếm các phần tử là số nguyên tố trong mảng, giúp sửa code
    Gửi bởi mrcuhuy 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: 31-12-2013, 11:59 AM
  2. Tạo ngẫu nhiên danh sách các số nguyên viết bằng C. Xem code giúp mình?
    Gửi bởi mr.en_tu_di trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 20-03-2011, 01:08 AM
  3. Code in ra số nguyên tố và số chính phương của một dãy trên C. Giúp mình kiểm tra code?
    Gửi bởi lavender trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 7
    Bài viết cuối: 07-06-2009, 01:52 PM
  4. Code tìm các số nguyên tố trong mảng. Giúp em sửa lỗi?
    Gửi bởi chuong01 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 31-03-2009, 12:16 PM
  5. Xin giúp sửa code bài tìm số nguyên tố dùm
    Gửi bởi dkdai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 08-03-2009, 11:50 AM

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