→ nknuukyo: 使用版本為3.6.108/09 14:29
※ 編輯: nknuukyo (124.9.52.34), 08/09/2017 14:29:54
推 tsoahans: int(i/j)+1改int(i/j)+208/09 15:32
推 CaptainH: i/j 這是錯的08/09 16:58
推 stucode: 這問題網站上就有勘誤資訊 不過我也不懂i/j那邊的邏輯08/09 19:06
→ bruce0209: for j 的前一行加上08/09 20:35
→ bruce0209: print("i:"+str(i)+" j:2~"+str(int(i/j)+1))08/09 20:35
→ bruce0209: if j>i**0.5的前一行加上08/09 20:36
→ bruce0209: print(str(j)+" > "+str(i**0.5)+" ? ")08/09 20:36
→ bruce0209: 應該就不會找不到BUG了吧...08/09 20:38
→ bruce0209: 話說我也不懂i/j的原因 求解08/09 20:38
→ mikapauli: 最小就近似根號i,隨便給個上限而已吧。想法很奇怪就是08/09 20:51
→ uranusjr: 我問一句這是完全照書上打的嗎, 如果是的話感覺不算好書08/09 23:06
→ uranusjr: 看了勘誤感覺應該是照書上沒錯, 這種爛 code 也出書...08/09 23:10
→ uranusjr: i/j 寫成 int(i**0.5) 應該就看得懂了吧, 這兩個等價08/09 23:11
→ uranusjr: 把的最後一個 iteration j = (i/j-1)+1 移項應該就懂了08/09 23:13
→ bruce0209: 懂原義了不過還是很詭異...08/09 23:25
→ bruce0209: j^2=(i**0.5)^2然後移項的意思吧....08/09 23:26
→ bruce0209: 可是 j1 = (i/j2-1)+1 在運作上j1和j2不相等吧...08/09 23:27
推 TitanEric: 我覺得程式邏輯很奇怪…08/10 00:19
→ uranusjr: 是啊, 因為 range 的參數是在初始化時就決定, 所以裡面08/10 00:49
→ uranusjr: 的 j 會是「前一個 i iteration」的 j 的最後一個值08/10 00:51
→ uranusjr: 會覺得詭異奇怪是正常的, 因為寫出這樣的東西要嘛根本08/10 00:52
→ uranusjr: 寫錯要嘛腦袋打結異於常人, 無論是哪種在一般公司都會被08/10 00:53
→ uranusjr: 電到翻, 別說寫書出來賣錢了...08/10 00:53
就幾本買來的python書來看,菲絲恩這本很白話,而且例題的難度跟量都很適合初學者,
這也是這類書的兩難,懂的人未必很會教,擅長教的人未必很懂。只是這個題目很例外,
我也看了一個上午....XD,一個數一個數代入,才比較理解,但也搞不懂為何選擇這個方
式說明巢狀結構。
另外如果加上print j,質數通常是算到接近一半的i,而非根號i,這點該書也說,只用f
or的巢狀結構要想的很清楚才行。
※ 編輯: nknuukyo (101.15.85.252), 08/10/2017 08:10:21
※ 編輯: nknuukyo (101.15.85.252), 08/10/2017 08:15:17
→ bibo9901: 因為i是偶數時, j只會跑到2. 所以下一個i(奇數)時, 就會 08/10 08:31
推 bibo9901: 使j介於2~i/2, 這個上限大於sqrt(i), 所以大部份是對的 08/10 08:33
推 APM99: 這篇寫法是很標準的求質數方法阿 不詭異吧 08/10 08:50
→ APM99: 非常標準的作法 ~~只是2會被忽略掉 沒啥差 08/10 09:00
推 APM99: #忘了說 這篇一開始的寫法5沒印出來是被誤差害死的... 08/10 09:23
→ APM99: 盡量避免掉會有誤差的寫法 08/10 09:25
→ stucode: 看了眾位板友解說豁然開朗 原來是i/j是從j>sqrt(i)來的 08/10 10:15
推 APM99: 我中午在發篇文解釋一下 這篇方法是高中學的A*B=P求質數法 08/10 10:17
→ nknuukyo: 感謝APM99大~ !! 08/10 10:18
→ stucode: 不過原書code真的寫得很不好 勘誤版本雖然結果正確 08/10 10:19
→ stucode: 建議原PO看過就好 08/10 10:20
→ APM99: 我的寫法是錯的! 我沒避免掉誤差 08/10 10:31
→ APM99: 可惜我現在沒法發文 08/10 10:32