色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

怎么求1000以內的素數

劉柏宏2年前27瀏覽0評論

怎么求1000以內的素數?

可以編寫一個素數考察函數,在主函數中調用該函數對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\n",i);//每行輸出20個 if(j%20) printf("\n"); return 0;}

運行結果如下: