阅读以下说明和C程序,填充程序中的空缺。 [说明] 埃拉托斯特尼筛法求不超过自然数N的所有素数的做法是:先把N个自然数按次序排列起来,1不是素数,也不是合数,要划去;2是素数,取出2(输出),然后将2的倍数都划去;剩下的数中最小者为3,3是素数,取出3(输出),再把3的倍数都划去;剩下的数中最小者为5,5是素数(输出),再把5的倍数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,每次从序列中取出的最小数构成的序列就是不超过N的全部质数。 下面的程序实现埃拉托斯特尼筛法求素数,其中,数组元素sieve[i](u>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;______;i++) sieve[i]=1; for(k=2;;) /*找出剩下的数中最小者并用K表示*/ for(;k<N+1&&sieve[k]==0;______); if(______)break; print("%d\t",k); /*输出素数*/ /*从Sieve中去掉k及其倍数*/ for(i=k;i<N+1;i=______) ______; return 0; /*end of main*/[/i][/i][/i][/i]
举一反三
- 下面程序是求100~200的全部素数,请填空 main() { int n, i, k, m = 0; for (n = 101; n <= 200; n = n + 2) { k = sqrt(n); for (i = 2; i <= k; i++) if (n%i == 0) ; if ( ) { printf("%d ", n); m = m + 1; } if (m % 10 == 0) printf("\n"); } printf("\n"); }
- /*【程序填空】题目:编程序输出从键盘输入的n个数中的素数及其个数*/#include "stdio.h"int prime(int x){ int i,k=1; if(x<2) k=0; for(i=2;i<=x/2;i++)/***********SPACE***********/ if(【?】) k=0;/***********SPACE***********/ 【?】; }main() {/***********SPACE***********/ int i,n,x,【?】; scanf("%d",&n); for(i=1;i<=n;i++) {scanf("%d",&x);/***********SPACE***********/ if(【?】) {printf("%4d",x); k++; } } printf("\n%4d\n",k); }
- 以下程序的输出结果是()。#include <;stdio.h>;int main(void){int n[2]={O},i,j,k=2;for(i=0;i<;k;i++)for(j=0;j<;k;j++)n[j]=n[i]+1;printf(”%d\n”,n[k]);return 0;}[/i] A: 不确定的值 B: 3 C: 2 D: 1
- 以下程序的输出结果是 main() { int i, k, a[10], p[3]; k=5; for (i=0;i<10;i++) a[i ]=i; for (i=0;i<3;i++) p[i ]=a[i *(i+1)]; for (i=0;i<3;i++) k+=p[i] *2; printf("%d\n",k); }
- 现有如下程序段: #include"stdio.h" main() {int k[30]={12,324,45,6,768,98,21,34,453,456}; int count=0,i=0; while(k[i]) {if(k[i]%2==0||k[i]%5==0)count++; i++;} printf("%d,%d\n",count,i);} 则程序段的输出结果为.