阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。 【说明】 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去

admin2013-07-03  20

问题  阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。
    下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve(i>0)的下标i对应自然数i,sieve的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve设置为0。
    【C程序】
    #include<stdio.h>
    #define N 10000
    int main()
    {
        char sieve[N+1]={0);
        int i=0,k;
        /*初始时2~N都放入sieve数组*/
        for(i=2;  (1)  ;i++)
        sieve=1;
        for(k=2;;){
        /*找出剩下的数中最小者并用K表示*/
        for(;k<N+1&&sieve[k]==0;  (2)  );
        if(  (3)  )break;
        print(“%d\t”,k);/*输出素数*/
        /*从sieve中去掉k及其倍数*/
        for(i=k;i<N+1;i=  (4)  )
        (5)  
        }
          return 0;
    } / *end of main* /

选项

答案(1)i<N+1或其等价形式 (2)k++或++k或其等价形式 (3)k>N或k≥N+1或其等价形式 (4)i+k或其等价形式 (5)sieve[i]=0或其等价形式

解析 本题要求是完成程序,该程序的功能是找到不超过自然数N的所有素数。首先在初始时2~N都放入sieve数组中,所以i的取值范围为2~N,包含N,所以(1)应该填i的最大取值为N,所以(1)填i=1,表示所有的数,无论是否为素数都放人数组中,接下来找出剩下的数中最小者并用K表示,在for循环中,每执行一次循环就k值就要加1,所以(2)应该填k++或++k或其等价形式,当循环执行到k>N或k≥N+1时,即k值超过了N值时,该循环结束用break跳出里面的循环语句,故(3)应该填k>N或k≥N+1或其等价形式,接下来输出素数,再删除素数的倍数,这也是一个循环语句,此时变量i是从i开始到i+k结束,所以(4)应填i+k或其等价形式,找到是素数的倍数后,再将该素数的倍数赋值为0,从sieve数组中划去,所以(5)应填sieve=0或其等价形式。
转载请注明原文地址:https://jikaoti.com/ti/LbW7FFFM
0

最新回复(0)