瀏覽單個文章
rockogl
New Member
 

加入日期: Jan 2004
您的住址: 21XX年的日本
文章: 1
Lightbulb

對程式做點修改
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
當然嚴格來說發生這種情形的應該是在每一輪質數的倍數消完後
要找下個最大已知質數發生

大概就這樣
__________________
行ん!①Чヱс⑦!
舊 2004-07-18, 01:47 PM #310
回應時引用此文章
rockogl離線中