首页 > 用户发贴区 > 编程问题提问区 > 有一道题目,请高手指点迷津
2008
01-05

有一道题目,请高手指点迷津

小弟 刚开始学习c语言,有些问题,请高手指点迷津。


question: 使用筛选法(Eratosthenes法),求1–1000之间的素数。


有一道题目,请高手指点迷津》有 5 条评论

  1. alex1010 说:

    我试着编写了一个程序,如下:

    //=================================

    # include<stdio.h>
    # include<math.h>
    # define N 1000
    //xxxxxxxxxxxxxxxxxx
    //fuction protype

    //xxxxxxxxxxxxxxxxxxx
    //global varible

    //long int total=0L;
    //xxxxxxxxxxxxxxxxxxx

    void main()
    {
    int a[N]={0};
    int i;
    int j;
    int line;
    int col;
    int temp;
    for(i=0;i<N;i++)
                      a[i]=i+1;
    //xxxxxxxxxxxxxxxxxxxxx                 
    line=0;
    col=0;
    for(i=0;i<N;i++){
                      printf(“%5d  “,a[i]);
                      col++;
                      if(col>=10){
                                col=0;
                                printf(“\n”);
                                line++;
                                if(line>=11){
                                              line=0;
                                              getch();
                                            }
                                }
                     
                      }
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxx                 
    a[0]=0;
    temp=sqrt(N);
    for(i=1;i<temp;i++){
        if(a[i]){
                for(j=i+1;j<=N;j++){
                                    if(a[j]&&(a[j]%a[i]==0))
                                                            a[j]=0;
                                    }
                }

                      }                 
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxx                    
    line=0;
    col=0;
    printf(“\n the primes are:\n”);
    for(i=0;i<N;i++){
        if(a[i]){
                printf(“%5d  “,a[i]);
                      col++;
                      if(col>=10){
                                col=0;
                                printf(“\n”);
                                line++;
                                if(line>=11){
                                              line=0;
                                              getch();
                                            }
                                }
                }
    }                 
                     
    getch();
    }

  2. alex1010 说:

    程序运行,正确

    如下图

     

    晕 ,怎么上传不了图片啊,

    然后,我很高兴,于是,我把 N 的值改成 10000,求 1–10000之间的素数,

    也出来结果了。我很高兴,呵呵。。。。

    但是,无意中,我看到了 输出结果中 有 999  这个数字。我晕了

    因为 999=9×111=3x3x111  不是素数啊

  3. alex1010 说:

    I am so confused.

  4. xstar 说:

    求素数的算法用文字描述一下!

    这段有问题!
    //xxxxxxxxxxxxxxxxxxxxxxxxxxxx                 
    a[0]=0;
    temp=sqrt(N);
    for(i=1;i<temp;i++){
        if(a[i]){
                for(j=i+1;j<=N;j++){
                                    if(a[j]&&(a[j]%a[i]==0))
                                                            a[j]=0;
                                    }
                }

                      }        

  5. alex1010 说:

    多谢了,
           我看了一下,是变量越界了,可是,如果不使用temp变量,程序依然成立,
    a[0]=0;
    for(i=1;i<sqrt(N);i++){
        if(a[i]){
                for(j=i+1;j<=N;j++){
                                    if(a[j]&&(a[j]%a[i]==0))
                                                            a[j]=0;
                                    }
                }

                      }        

    请问:问题出在哪儿???

留下一个回复