推 VictorTom:1個可以加速的地方是, 迴圈跑到根號x就夠了:) 07/22 18:09
→ iamivers0n:篩法 07/22 18:23
→ SiriusJinn:那可以直接把for裡的x改成pow(x,0.5)嗎? 07/22 18:23
→ SiriusJinn:啊啊~我發現有個地方打錯了 = = 07/22 18:26
→ pico2k:m=0可以拿到for迴圈之外 07/22 18:30
→ pico2k:開根號求出來的值是double... 07/22 18:31
→ SiriusJinn:嗯呀~這樣似乎有問題耶... 07/22 18:35
→ SiriusJinn:我用強制轉換看看 07/22 18:40
推 ledia:迴圈每次都要算一次 pow 會不會太慢了 可以先算好 又不會變 07/22 18:44
→ ledia:pow 比 sqrt 慢 07/22 18:46
→ SiriusJinn:好的,我用代數取代試試 07/22 18:47
推 legnaleurc:i*i < x 07/22 18:57
→ secondsee:x=sqrt(x); 07/22 19:01
推 yyuto:sqrt複雜度很高 建議使用L大提的i*i<x 07/22 19:12
→ SiriusJinn:若令一個y=(int)(pow(x,0.5))這樣y是整數嗎? 07/22 19:12
→ SiriusJinn:用了i*i<x 結果"4"判斷為質數耶= = 07/22 19:16
推 Fenikso:i*i <= x 07/22 19:24
推 VictorTom:雖然用i*i<=x比較快, 可是算根號也只需要做一次啊XD 07/22 19:45
→ VictorTom:至於pow/sqrt算出來是double的問題, 直接+0.5取整就好:) 07/22 19:46
推 VictorTom:個人建議, 不需要才這種狀況就寫下goto.... 07/22 20:50
→ SiriusJinn:我想說能不能加快個執行速度耶... 07/22 21:39
推 liangjr:篩法會快很多 07/23 17:31
推 ledia:篩法會不會比較快也要看查幾次~ 07/23 17:49
→ ledia:不過篩法的好處是篩一次出來就可以 binary search (or hash) 07/23 17:49
→ SiriusJinn:我解決了 = = 改用y=(int)(sqrt(x))後不會逾時就過了 07/23 17:58
→ SiriusJinn:然後把start改成break 07/23 17:59
→ SiriusJinn:我補一下我的寫法好了 07/23 17:59
※ 編輯: SiriusJinn 來自: 140.120.90.174 (07/23 18:00)
→ SiriusJinn:為了加快速度,for迴圈裡的東西果然是越少越好 07/23 18:01
推 liangjr:篩法最強的是建一次表之後就可以查表沒錯 07/23 18:16
→ liangjr:但就算只用一次 篩法還是會比現在的方法快 07/23 18:17
→ liangjr:就算是篩法最基本的 篩掉2的倍數不檢查 速度就會快很多了 07/23 18:18
→ liangjr:迴圈可以改成 i=3; i<=y; i+=2, x=2的情況另外判斷 07/23 18:19