對程式做點修改
http://www.csie.ncu.edu.tw/~cs102104/file/Sieve.zip
現在測試100,000,000應該沒什麼問題
我用Athlon 1GHz(133MHz)
256MB SDR SDRAM
Windows XP
程式由DevC++ 4.9.8.0(MinGW)編譯
跑起來要26秒
吃掉記憶體約99MB
原作者顯然本來要寫Sieve演算法
可是卻搞錯了演算法的細節
基本上這個演算法的方法是
找出目前已知最大的質數
然後把這質數的正整數倍數的數字通通砍掉
而且除了2以外
3以後的質數的整數倍數要砍掉只要砍其質數的3,5,7,9,11.....
所有奇數倍數就可以了
我也把原作者的int整數(本來一個欄位要4byte)
改成用bool(一個欄位1byte)
且陣列長度可以調整
總之大家試試看吧
另外這樣的寫法因為所Access的記憶體範圍太廣
直觀上來看
比較容易發生Cache miss
當然嚴格來說發生這種情形的應該是在每一輪質數的倍數消完後
要找下個最大已知質數發生
大概就這樣