艾氏篩法研究

2021-05-25 16:45:05 字數 1066 閱讀 8421

計算輸出1億以內的質數.當然一上來這個所有的偶數乾掉.2直接輸出.

這個是我的**.最後步長330130093  也就是這麼多步.

下面的是老師的** 步長99151769  初步計算速度是我的三倍.姜還是老的辣.我的其實還有優化的空間.暫時不去想了.備考去.

#include"stdio.h"

#include"math.h"

#define n 100000000

bool a[n];

void main()

//c語言中布林陣列預設的是false

for(i=3;i<=int(sqrt(n));i+=2)}}

j=3;

printf("2/t");

while(j<10000)

j++;

}printf("/n");

printf("步長%d/n",ljq);

}這個是已知的最優演算法.原理還沒想

/*素數篩選法之優化演算法b*/

# include

# include

# define n 100000000

bool prime[n];

int main()

/*減低演算法時間複雜度之處,比a減低得還要多*/

}printf("%d/t",2);   /*2非奇數故未在迴圈演算法之內,但2是素數,故先輸出*/

for(i=0;i<5000;i++)

/*輸出2*n以內的素數,此處只輸出10000以內,耗時在4秒內【由此可見此優化演算法比最簡單篩選法好】;

我拿秒錶測試過,即使是將一億內的素數輸出,整個過程也就42秒【比優化a中的50秒要快,當n數量級

更大時,此處的優點將更加凸顯,可見它比a演算法好】(不將cmd螢幕放在當前位置,42秒,若將其放

在當前螢幕,看其逐條輸出運算結果,就慢些,視我們講其放置為當前視窗的情況而定!)*/

if(prime[i]==true)

printf("%d/t",2*i+3);

printf("/n");

printf("步長%d",ljq);

return 0;

}

艾氏篩法資料

給出要篩數值的範圍n,找出 以內的素數 先用2去篩,即把2留下,把2的倍數剔除掉 再用下乙個質數,也就是3篩,把3留下,把3的倍數剔除掉 接下去用下乙個質數5篩,把5留下,把5的倍數剔除掉 不斷重複下去.詳細列出演算法如下 列出2以後的所有序列 標出序列中的第乙個素數,也就是2,序列變成 將剩下序列...

poj 3292 艾氏篩法的變型

題意 有一種數叫h number,什麼是h number,就是等於4 n 1的數,所有的h number mod 4 等於 1。h number分為h prime和h composite兩類,h prime是不能被自己和1以外的其他h number 整除的數。剩下的就都是h composite數了。...

埃氏篩法 素數篩

埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...