閱讀以下說(shuō)明和C程序,填充程序中的空缺,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
埃拉托斯特尼篩法求不超過(guò)自然數(shù)N的所有素?cái)?shù)的做法是:先把N個(gè)自然數(shù)按次序排列起來(lái),1不是素?cái)?shù),也不是合數(shù),要?jiǎng)澣? 2是素?cái)?shù),取出2(輸出),然后將2的倍數(shù)都劃去:剩下的數(shù)中最小者為3,3 是素?cái)?shù),取出3(輸出),再把3的倍數(shù)都劃去;剩下的數(shù)中最小者為5,5是素?cái)?shù),再把5的倍數(shù)都劃去。這樣一直做下去,就會(huì)把不超過(guò)N的全部合數(shù)都篩掉,每次從序列中取出的最小數(shù)所構(gòu)成的序列就是不超過(guò)N的全部質(zhì)數(shù)。
下面的程序?qū)崿F(xiàn)埃拉托斯特尼篩法求素?cái)?shù),其中,數(shù)組元素sieve[i](i>0)的下標(biāo)i對(duì)應(yīng)自然數(shù)i,sieve[i]的值為1/0分別表示i在/不在序列中,也就是將i劃去(去掉)時(shí),就將sieve[i]設(shè)置為0。
【C 程序】
*include <stdio.h>
*define N 10000
int main ()
{
char sieve[N+1] = {0};
int i = 0,k;
/*初始時(shí)2~N都放入sieve數(shù)組*/
for(i=2; (1) ; i++)
sieve[i] = 1;
for( k = 2; ;){
/*找出剩下的數(shù)中最小者并用k表示*/
for( ; k<N+1&& sieve[k]==0; (2) );
if ( (3) ) break;
printf("%d\t",k); /*輸出素?cái)?shù)*/
/*從sieve中去掉k及其倍數(shù)*/
for( i=k; i<N+1; i= (4) )
(5) ;
}/*end of for*/
return 0;
} /*end of main*/
10年專(zhuān)注信管,信管教育專(zhuān)注者,信管網(wǎng)優(yōu)勢(shì)
免費(fèi)試聽(tīng)信管網(wǎng)信息系統(tǒng)項(xiàng)目管理師課程
全國(guó)前50名高分學(xué)員訪談:董麗(174)、李思...
信息系統(tǒng)項(xiàng)目管理師高端班培訓(xùn)課程
信管老師100小時(shí)直播課程
軟考報(bào)名專(zhuān)題(報(bào)名時(shí)間、入口等)
中級(jí)系統(tǒng)集成項(xiàng)目管理工程師通關(guān)課程
系統(tǒng)規(guī)劃與管理師課程(考試介紹與題型分析)
軟題庫(kù):軟考在線題庫(kù)、支持手機(jī)答題