( 模拟 1) 【 程序说明 】 本程序用古典的 Eratosthenes 的筛法求从 2 起到指定范围内的素数。如果要找出 2 至 10 中的素数,开始时筛中有 2 到 10 的数,然后取走筛中的最小的数 2 ,宣布它是素数,并把该素数的倍数都取走。这样,第一步以后,筛子中还留下奇数 3 、 5 、 7 、 9 :重复上述步骤,再取走最小数 3 ,宣布它为素数,并取走 3 的倍数,于是留下 5 、 7 。反复重复上述步骤,直至筛中为空时,工作结束,求得 2 至 10 中的全部素数。 提示:用数组 sieve 表示筛子,数组元素 sieve[i] 的值为 1 时,表示数 i 在筛子中 ; 值为 -1 时表示数 i 已被取走 。 【 程序 】 #include #define MAX 22500 void main() { int i, range, factor, k; int sieve[MAX]; printf(“ please input the range : ”); scanf(“%d”, &range); /*range 指出在多大的范围内寻找素数 */ for (i=2; i<=range; i++) /* 筛子初始化 */ (1) ; factor=2 ; while (factor<=range) { if ( (2) ) { /* 筛子最小数是素数 */ printf(“%d\n”,factor); k=factor; while (k<=range) { /* 循环体的作用是移走素数的倍数 */ (3) ; k= (4) ; }//end of while (k<=range) }//end of if (5) ; // 下一个 } //end of while (factor<=range) }//end of main