阅读以下说明和C程序,填充程序中的空缺,将解答填入答题纸的对应栏内。
【说明】
埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。
下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](i>0)的下标i对应自然数i,sieve[i]的值为1/0分别表示i在/不在序列中,也就是将i划去(去掉)时,就将sieve[i]设置为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[i]=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