zoj 1133 Smith Numbers

一道比較簡單的題目,題目意思比較明確,沒必要多解釋。但是我讀題的時候還是着急了點,中間的一段直接忽略的,導致沒有看到素數的影響,浪費了不少時間。

尋找Smith Number基本上就是尋找素數的方法,使用試除法,比較簡單。也就是用素數不斷的除啊除,除到差不多了就可以搞定了。題目的主要難點在於時間,有可能會超時。做題前建議先看看status,這樣可以發現TLE的比較多,一般這道題目就是需要做好時間優化。好了貼下代碼,結合代碼說說我的解法。

 

代碼有點搓,看起來不是很順眼。不過諸位看懂應該沒什麼問題的。

首先我的想法是輸入的數值最大就是99999999,而試除法上限是sqrt(n),所以大概10001就夠了。我首先計算了小於10002的所有數字的素數性質和Smith值。然後對於要判斷的數字,如果小於10002就直接判斷,如果大於就進行試除,這裏可以採用很多的循環方式,比如:for i =2 to 10001, for i=10001 to 2, for i=prime[0] to prime[tagend], for i=prime[tagend] to prime[0]。通過嘗試,發現上面代碼中的方式是最快的,當然其他方式都能AC。

好了,其他也沒什麼好說的,寫的時候小心點就好了,我還是WA了n次才搞定的,不夠謹慎啊不夠謹慎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章