→ costbook:1ACM online judge的系統真的怪怪的... 07/03 20:13
→ costbook:我把這三行宣告的順序換了一下 07/03 20:13
→ costbook: int count=0; 07/03 20:13
→ costbook: bool prime=false; 07/03 20:13
→ costbook: char in; 07/03 20:13
→ costbook:就出現runtime error,換回來又好了... 07/03 20:13
→ costbook:不過歸零的問題還是搞不懂 07/03 20:27
推 ledia:如果我沒算錯的話, 你新的 code, ascii 只有 126 格 07/03 21:01
→ ledia:但是 ASCII_PRINTABLE_MAX 是 127 07/03 21:01
→ ledia:因此你歸零會歸到 ascii[126] 這是會出問題的 07/03 21:02
→ ledia:run-time error 或 wrong answer 可能因此而來 07/03 21:02
→ ledia:對了, 寫到第 ascii[126] 時, 就是寫到之前的 stack var 07/03 21:03
→ ledia:也就是 in, prime 那些變數 07/03 21:03
→ ledia:這次我只用看的, 沒測過, 有沒有別的問題我就不知道了 07/03 21:04
推 costbook:對耶...謝啦 (不過只快了0.001秒...) 07/03 21:07
推 ledia:這個加不了多快的... 07/03 21:16
→ ledia:要加快的話, 我建議把 prime 先算好存在 table 裡... 07/03 21:16
→ ledia:最一開始一次算出來, 以後怎麼查都是一次 table-lookuup 07/03 21:17
→ ledia:isPrime 才應該是瓶頸處 07/03 21:18
→ ledia:然後, 分三段 for 可能可以減少一點時間.. 也可能減不了 07/03 21:19
→ ledia:不過至少少 process 一些不可能出現的字元 07/03 21:19
→ ledia:歸零也不需要每個都歸, ascii[i]>0 和 isPrime 拆開 07/03 21:20
→ ledia:ascii[i] > 0 時才需要歸零 07/03 21:21
→ ledia:想到的大概就這些.. 再麻煩一點的.. 就懶得想了 XD 07/03 21:21
推 costbook:好方法,來試試看 07/03 21:27
推 costbook:結果:時間一樣,記憶體用量變大.可能試測資太小, 07/03 21:45
→ costbook:所以看不出效果....算了,去研究下一題了 07/03 21:46
↑我自己發文的...我幹嘛用推文回啊
※ 編輯: costbook 來自: 220.139.153.131 (07/03 21:48)
推 drkkimo:= =...||| 07/03 21:49
→ drkkimo:解說完整喔~ 收錄精華裡給其他人(新手)參考 07/03 21:49
推 cplusplus:用篩法 大概0.008 參考一下吧 07/03 22:36
推 drkkimo:嗯 不過篩法花空間~ 07/03 23:14
推 cplusplus:這一題空間很小啦 而且現在排名排時間 時間比較寶貴XD 07/03 23:51
這個...我寫出來的篩法....好像不太對,
雖然拿了accpeted...
//利用篩法清除非質數
inline void sievePrime(int *ptr){
for(int i=2;i<2001;i++){
if(i*i>=2001/2)
break;
for(int j=48;j<ASCII_PRINTABLE_MAX;j++){
if(ptr[j]==1)
ptr[j]=0;
else if(ptr[j]==2);
else if(ptr[j]>i && ptr[j]%i==0)
ptr[j]=0;
}
}
}
※ 編輯: costbook 來自: 220.139.153.35 (07/04 15:42)