計算輸出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...