Re: [心得] 求質數的C++程式

看板C_and_CPP (C/C++)作者 (pomelocandy)時間1小時前 (2026/05/07 22:15), 1小時前編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《bl2086 (Bingo)》之銘言: : prime.cpp : https://mega.nz/file/61RhHAJQ#g5xbeuM5egw5R0whT9__sOZFbUrXG2slwyUI7j1fKRA : 已更正,用的是愛氏篩法,用質數試除某數j,如果超過int_sqrt(j)都不整除的話就 : 確認j為質數 首先,你用了一個陣列來存已知的質數 注意你還是用 j, j+=2 的方式,然後把所有已知的質數拿出來測一次 還要用一個土砲的方式算平方根 那麼顯然你還沒讀懂 sieve of eratosthenes 要知道除法跟乘法的代價是不一樣的,算平方根也不是,你的土砲方法更不是 既然你都限制使用者只能輸入 65535 了,sieve of eratosthenes 有更好的實作 如果你真的對質數很有興趣,這裡有個不錯的專案你可以參考看看 https://github.com/kimwalisch/primesieve ---- 挑戰是好事但請對自己有要求,不要侷限在什麼奇怪的 fchart 那是專有 tool 大家不會開,對表達你的想法沒有任何益處 你的程式我看過,至少有下列幾個可以改善 (包括但不限於,歡迎版友們在下方留言做 code review) 1. 為什麼要叫 l0, l1, l2? label+goto 不是不能用(雖然我是不用派的),但要用得有意義 整份 code 只有 END 一個 label 是有意義的,其他全部都是雜訊 2. 為什麼只有 65536,要知道 65536 不過 16 bits 請問是什麼限制你不能允許到 32 bits, 64 bits ... 你是天底下最神通廣大的 C/C++ programmer 怎麼會被 65536 這麼迷你的數給擋住? 3. 請問 6542 是怎麼來的?為什麼會有這個 magic number 承上如果要讓使用者輸入很大的數,6542 不會超過嗎? 4. 請問 int_sqrt 的執行效率如何?有更快的實作嗎? 雖然做了 sieve of eratosthenes 不會用到 sqrt 但我建議你想想看你的實作有什麼問題 5. 為什麼你輸出的最後會有一個 ",",這顯然是程式員的疏失 ---- 綜上所述,挑戰失敗,原文砍除 另外宣告如下: 1. fchart 非本版事務,亦非公開格式/公開平台 未來文章不接受含 fchart 之內容,有則直接砍除+水桶 2. 已經是 2026 年了,基於版主私心在這裡重申,下一次發文 不準再出現 label 與 goto,請用其他的結構方式 若要使用 label+goto 請在文章中述明理由,以及其他結構為何不適用 同上,無法述明則直接砍除+水桶 2. 請續行挑戰 prime number,這年頭 AI 工具很多,C/C++ 也寫得行雲流水 試著和 AI 寫出的 code 相互比較,相信你可以學到很多 3. C/C++ 精通不容易,我鼓勵你挑戰但請對自己有要求 希望有一天你能寫出讓自己滿意,也能讓版友們滿意的程式碼 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.88.234 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1778163348.A.2B1.html ※ 編輯: lc85301 (36.231.88.234 臺灣), 05/07/2026 22:24:52
文章代碼(AID): #1f_9wKAn (C_and_CPP)
文章代碼(AID): #1f_9wKAn (C_and_CPP)