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

看板C_and_CPP (C/C++)作者 (pomelocandy)時間2周前 (2026/05/07 22:15), 2周前編輯推噓4(408)
留言12則, 6人參與, 4天前最新討論串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 寫成這樣 然後該怎麼幫你讓你的 code 更好 你的程式我看過,至少有下列幾個可以改善 (包括但不限於,歡迎版友們在下方留言做 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 年了,基於版主私心在這裡重申,請 bl2086 下一次發文 不准再出現 label 與 goto,請用其他的結構方式 若要使用 label+goto 請在文章中述明理由,以及其他結構為何不適用 同上,無法述明則直接砍除+水桶 3. 請續行挑戰 prime number,這年頭 AI 工具很多,C/C++ 也寫得行雲流水 試著和 AI 寫出的 code 相互比較,相信你可以學到很多 4. 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

05/08 11:06, 2周前 , 1F
不準(X) 不准(O)
05/08 11:06, 1F

05/08 12:34, 2周前 , 2F
如果我寫C要做end of cleanup不行用goto end嗎?qq
05/08 12:34, 2F

05/08 13:09, 2周前 , 3F
樓上看你的需求,至少在求質數上我看不出有需要用
05/08 13:09, 3F

05/08 22:08, 2周前 , 4F
修正一下,最後四點是針對原 PO 的 review 不是全體…
05/08 22:08, 4F
※ 編輯: lc85301 (36.231.88.234 臺灣), 05/08/2026 22:10:06

05/09 06:37, 2周前 , 5F
可以像求π那樣 任意小數點以下任何位 只不過質數是大數 要這
05/09 06:37, 5F

05/09 06:39, 2周前 , 6F
麼做可能需要定義陣列來存放質數
05/09 06:39, 6F

05/09 20:34, 2周前 , 7F
是不用那麼嚴苛,但要求個 32 bits 整數不過份吧
05/09 20:34, 7F
※ 編輯: lc85301 (36.231.76.36 臺灣), 05/09/2026 20:37:56

05/15 17:45, 1周前 , 8F
label跟goto沒那麼罪惡吧 嵌入式還是會用啊
05/15 17:45, 8F

05/16 10:15, 1周前 , 9F
是的,但原 PO 的應用顯然不該這樣用
05/16 10:15, 9F

05/23 10:21, 4天前 , 10F
想到有次要維護特殊指令集asm的程式 分支轉跳一大堆又不
05/23 10:21, 10F

05/23 10:21, 4天前 , 11F
得不用 適應了一年多才敢說我改得動 那個分支看久了真的
05/23 10:21, 11F

05/23 10:21, 4天前 , 12F
是腦破壞 回去寫C都會覺得不對勁
05/23 10:21, 12F
文章代碼(AID): #1f_9wKAn (C_and_CPP)
文章代碼(AID): #1f_9wKAn (C_and_CPP)