看板 Python 關於我們 聯絡資訊
大家好, 寫了一個求質數程式(列出1~1000000000之間所有質數): http://i.imgur.com/WxDZQun.png?1 def is_prime(num): if num == 2: return True if not num & 1: return False return pow(2, num-1, num) == 1 for i in xrange(3, 1000000000+1): if is_prime(i): print i 發現Python在處理大數據時的效率並不好, 上面的程式執行需要半小時以上(程式寫得不好也是原因之一), 不知道大家處理大數據還是會用C/C++嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 212.201.72.129 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1447326897.A.106.html
ccwang002: 1M 算大數據嗎…… 而且你算法應該不是列出你要的質數 11/12 19:33
ccwang002: 恩你是用 Fermat primality test? 11/12 19:37
yogi: 好妙的判斷prime法 11/12 19:37
ccwang002: 算到 1e6 的時候,就要算 2 ** (1e6-1) 感覺數字很大 11/12 19:38
ccwang002: 一般常見是用 Sieve of Eratosthenes 去篩質數 11/12 19:39
ccwang002: 例如 num = 341 就是反例,他不是質數(查 wiki 的) 11/12 19:41
ccwang002: 更多例子:https://oeis.org/A001567 11/12 19:52
decken: 感謝回覆,來看一下! 11/12 20:15
CaptainH: 這就是資工系價值所在 11/12 22:47
mikapauli: 他的問題是可能沒空間放質數表吧?不然直接做質數表就好 11/12 23:04
mikapauli: 另外一直print其實也會需要些時間。而且怎麼會用 11/12 23:06
mikapauli: Fermat's little theorem? XD 11/12 23:06
mikapauli: 要也是用Wilson's theorem吧(誤 11/12 23:10
MOONY135: 這樣算大數據? 11/13 11:07
MOONY135: 這個只是質數就會有這種特性吧 數論上找質數 11/13 11:11
MOONY135: 不是這樣找的 11/13 11:11
MOONY135: 好久沒有碰數論問題了 好懷念 11/13 11:31
johnny94: 這叫 Big Number 不是 Big data 11/17 15:48
MIKEmike07: 推樓上,差點噴飯XD 11/22 15:54