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

Đề tài: Liệt kê các số nguyên tố nhỏ hơn 1000

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

    Mặc định Liệt kê các số nguyên tố nhỏ hơn 1000

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. main()
    4. {
    5.     int n,flag;
    6.     printf("nhap n: ");
    7.     scanf("%2d",&n);
    8.     printf("So nguyen to: ");
    9.     for(n=1;n<1000;n++)
    10.     flag=1;
    11.     {                      
    12.             for(int i=2;i<=sqrt(n);i++)
    13.             {
    14.                if(n%i==0)
    15.                {
    16.                    flag = 0;
    17.                }
    18.             }
    19.             if(flag == 1)
    20.             {
    21.                printf("%2d ",n);
    22.             }
    23.     }
    24.     getch();           
    25. }
    Mình tìm không ra lỗi sai.Các bạn giúp mình với

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

    Thiếu hai chỗ này :
    + #include<math.h>
    + {} chỗ cần thì không có, có chỗ có thì lại không cần. Bạn thiếu 1 đôi ngoặc {}
    + Cho n chạy luôn từ 2.
    Hình như đoạn nhập n không có tác dụng hay sao ấy??? i cũng phải khai báo từ đầu hàm main() chứ.

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <math.h>
    4. int main()
    5. {
    6.     int i, n, flag;
    7.     printf("So nguyen to < 1000:\n");
    8.     for(n=2;n<1000;n++)
    9.     {
    10.         flag=1;
    11.         for(i=2;i<=sqrt(n);i++)
    12.             if(n%i==0)
    13.                flag = 0;
    14.         if(flag == 1)
    15.                printf("%4d ",n);
    16.     }
    17.     getche();
    18.     return 0;          
    19. }
    Đã được chỉnh sửa lần cuối bởi pannaruto : 01-02-2010 lúc 09:21 PM.

  3. #3
    Ngày gia nhập
    01 2010
    Bài viết
    61

    Bạn có thể sửa lỗi giúp mình được ko??

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

    Trích dẫn Nguyên bản được gửi bởi kienchochethahaha Xem bài viết
    Bạn có thể sửa lỗi giúp mình được ko??
    Bài của bạn mình đã sửa lại :
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    main()
    {
       
    int nflagijcount;
       
    printf("nhap n: ");
       
    scanf("%d",&n);
       
    printf("So nguyen to: ");
       
    count 0;
       for( 
    2;ni++ ){
           
    flag 1;
           for( 
    2<= sqrt);j++ ){
               if( 
    == ){
                   
    flag 0;
                   break;
               }
           }
           if( 
    flag == ){
                   
    printf("%d "i);
                   
    printf(" ");
                   
    count++;
           }
        }
        
    printf"\nCo %d so nguyen to tu 2 den %d "count);
        
    getch();

    Đã được chỉnh sửa lần cuối bởi principles_007 : 01-02-2010 lúc 09:23 PM.

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

    Code của bạn chưa được.Nó ko thể liệt kê nếu n=100 chẳng hạn

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

    Mặc định Liệt kê các số nguyên tố nhỏ hơn 1000

    Bạn muốn tối ưu lại code thì bạn bỏ biến int flag, bỏ thư viện math.h :
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    main(){
       
    int nijcount;
       
    printf"nhap n: " );
       
    scanf"%d", &);
       
    printf"So nguyen to: " );
       
    count 0;
       for( 
    2;ni++ ){
           for( 
    2<= + ( >> );j++ ){
               if( 
    == )
                  break;
           }
           if( 
    ){
               
    printf"%d ");
               
    printf" " );
               
    count++;
           }
        }
        
    printf"\nCo %d so nguyen to tu 2 den %d "count);
        
    getch();

    Đã được chỉnh sửa lần cuối bởi principles_007 : 01-02-2010 lúc 09:23 PM.

  7. #7
    Ngày gia nhập
    10 2009
    Bài viết
    23

    À, bạn sửa lai chổ nhập n là được :
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    main(){
       
    int nijcount;
       
    printf"nhap n: " );
       
    scanf"%d", &); /* bo so 2 di */
       
    printf"So nguyen to: " );
       
    count 0;
       for( 
    2;ni++ ){
           for( 
    2<= + ( >> );j++ ){
               if( 
    == )
                  break;
           }
           if( 
    ){
               
    printf"%d ");
               
    printf" " );
               if( 
    count == 10 )
                   
    printf"\n" );
               
    count++;
           }
        }
        
    printf"\nCo %d so nguyen to tu 2 den %d "count);
        
    getch();


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

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define k 1000
    4. int main()
    5. {
    6.     int i, n, count = 0;
    7.     char flag;
    8.     printf("So nguyen to < 1000:\n%4d",2);
    9.     for(n = 3; n < k; n+=2)
    10.     {
    11.         flag = 1;
    12.         for(i = 3; i*i <= n; i+=2)
    13.             if(n%i==0)
    14.             {
    15.                 flag = 0;
    16.                 break;
    17.             }
    18.         if (flag)
    19.         {
    20.             count++;
    21.             printf("%4d ",n);
    22.         }
    23.     }
    24.     printf("\nCo %d so\n",count);
    25.     getche();
    26.     return 0;          
    27. }

    Nếu như bài này theo tớ thì có thể bỏ bớt việc xét các số chẵn và các ước chẵn vì nếu thỏa 1 trong 2 dk đó thì đều là hợp số hết ( tất nhiên là trừ 2 ra ).
    Không hiểu yêu cầu của hahaha là gì vì tên topic là các số ng tố < 1000 trong khi hình như bạn lại làm theo hướng các số nhỏ hơn n nhưng mà cái đó không quan trọng lắm.
    Còn đâu tốt nhất là viết hàm ktra .
    @Pinciples_007 giải thích hộ tớ đoạn này nhé : j <= 1 + ( i >> 1 ) cái kia là điều kiện dừng nhưng mà tớ không hiểu cái >> lắm. Chắc là trong C++. Thử thì hình như n >> x = n/2x
    Đã được chỉnh sửa lần cuối bởi pannaruto : 01-02-2010 lúc 11:15 PM.

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

    j <= 1 + ( i >> 1 ) :
    ( i >> 1 ) => Đây là phép dịch bít trong C/C++. Chương trình sử dụng phép dịch bit sẽ chạy nhanh hơn do được phần cứng hổ trợ.

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

    Trích dẫn Nguyên bản được gửi bởi principles_007 Xem bài viết
    j <= 1 + ( i >> 1 ) :
    ( i >> 1 ) => Đây là phép dịch bít trong C/C++. Chương trình sử dụng phép dịch bit sẽ chạy nhanh hơn do được phần cứng hổ trợ.
    thế +-*/ ko cần phần cứng hỗ trỡ à

    các thao tác trên bit được xử lý nhanh hơn vì bản chất thật các phép +-*/ đều được quy về các thao tác xử lý bit

    nếu muốn chi phí thấp cho bài toán này ta nên rút số lần lặp trong việc kiếm tra xuống sqrt(n) thì tốt hơn, và giảm chi phí cho việc tính toán biểu thức điều kiện mỗi lần lặp. Đặc biệt là khi kiểm tra số càng lớn thì việc tính đến n/2+1 của bạn càng chậm dù bạn cảm thấy nó có ưu điểm ở chỗ dịch bit

    ví dụ tôi kiểm tra số 1 000 000
    nếu đến căn bậc 2 của n tôi chỉ có 1000-2 vòng lặp
    nếu đến n/2+1 của bạn tôi có 500 001-2 vòng lặp
    ok?và nếu nếu ko rút kết quả ra 1 biến phụ thì bạn sẽ mất thêm chi phí cho việc tính n/2+1 là 500 001-3 lần

    demo code:
    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>

    main()
        {
            
    int temp,flag;
            
    printf("Cac so nguyen to <1000 : ");
            for(
    int i=3;i<1000;i+=2)
                {
                    
    flag=1;
                    
    temp=int(sqrt(i));
                    for(
    int j=3;j<=temp;j++)
                        if (
    i%j==0) {flag=0;break;}
                    if (
    flagprintf("%d  ",i);
                    
                }
            
    getch();
        } 
    ^_,^
    Mình là 1 con gà trong công nghệ.
    Nếu mình có nói gì làm bạn không vui thì mong bạn bỏ qua cho, vì cá nhân mình còn gà lắm, và mình có ý tốt thôi.

    Bùi Tấn Quang

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

  1. Kỹ thuật C Tìm số nguyên dương nhỏ hơn 1000 có nhiều ước nhất
    Gửi bởi langman trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 78
    Bài viết cuối: 23-04-2014, 05:09 PM
  2. Kỹ thuật C++ Cộng 2 số nguyên dương rất lớn(1000 chữ số)
    Gửi bởi MrKem trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 02-10-2012, 06:23 PM
  3. Bài tập C Biểu diễn 2^1000 dưới dạng số nguyên dài!!?
    Gửi bởi prime122 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 25-02-2011, 01:26 PM
  4. Bài tập C Tìm các cặp số nguyên tố sinh đôi <1000 trong C++?
    Gửi bởi quyenbnhm 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: 03-12-2010, 03:48 PM
  5. Tìm số nguyên n nhỏ nhất sao cho tổng từ 1 đến n lớn hơn 1000
    Gửi bởi quoccuong1991cltg trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 21
    Bài viết cuối: 17-04-2010, 09:43 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