可以編寫一個素數考察函式,在主函式中呼叫該函式對1000以內的整數窮舉考察求解,也可以在主函式中直接對1000以內的整數窮舉考察求解。這裡提供一個用篩選法求解的程式碼,思路是宣告一個大於等於1000個元素的char型(int型當然也可以,這裡只是為了減少空間開銷)陣列並全部初始化為1,對下標不是素數的元素清0,最後依次輸出不為0元素的下標便是題解。為提高操作效率,用2~33間(33^2>1000了,所以考察已充分了)的素數去除大於這個素數而小於等於1000的不為0的數,能整除的便將這個下標的元素清0。當用小於33的最大素數考察完畢後,依次輸出陣列中不為0的元素下標即可。程式碼如下: #include "stdio.h" int main(int argc,char *argv[]){ int i,j; char m[1001];//宣告char型陣列作為篩選物件 for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]賦0,其餘賦1備選 i=2;//考察次數2~33,用期間的素數去除大於i且小於等於1000間不為0的數 while((j=i)<33){ while(!m[++j]);//取j為大於i的第一個不為0的數為起始考察物件 while(j<=1000){ if(j%i==0)//這個數若能被小於它的素數整除則以它為下標的元素清0 m[j]=0; while(!m[++j]);//下一個不為0的數為考察物件 } while(!m[++i]);//2~33間的下一個素數 } for(j=i=0;i<=1000;i++)//以下是輸出 if(m[i])//不為0的陣列元素的下標便是素數 printf(++j%20 ? "%4d" : "%4d ",i);//每行輸出20個 if(j%20) printf(" "); return 0; } 執行結果如下:
可以編寫一個素數考察函式,在主函式中呼叫該函式對1000以內的整數窮舉考察求解,也可以在主函式中直接對1000以內的整數窮舉考察求解。這裡提供一個用篩選法求解的程式碼,思路是宣告一個大於等於1000個元素的char型(int型當然也可以,這裡只是為了減少空間開銷)陣列並全部初始化為1,對下標不是素數的元素清0,最後依次輸出不為0元素的下標便是題解。為提高操作效率,用2~33間(33^2>1000了,所以考察已充分了)的素數去除大於這個素數而小於等於1000的不為0的數,能整除的便將這個下標的元素清0。當用小於33的最大素數考察完畢後,依次輸出陣列中不為0的元素下標即可。程式碼如下: #include "stdio.h" int main(int argc,char *argv[]){ int i,j; char m[1001];//宣告char型陣列作為篩選物件 for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]賦0,其餘賦1備選 i=2;//考察次數2~33,用期間的素數去除大於i且小於等於1000間不為0的數 while((j=i)<33){ while(!m[++j]);//取j為大於i的第一個不為0的數為起始考察物件 while(j<=1000){ if(j%i==0)//這個數若能被小於它的素數整除則以它為下標的元素清0 m[j]=0; while(!m[++j]);//下一個不為0的數為考察物件 } while(!m[++i]);//2~33間的下一個素數 } for(j=i=0;i<=1000;i++)//以下是輸出 if(m[i])//不為0的陣列元素的下標便是素數 printf(++j%20 ? "%4d" : "%4d ",i);//每行輸出20個 if(j%20) printf(" "); return 0; } 執行結果如下: