#13528: 不用建「質數表」的解法


joylintp (joylintp)

學校 : 國立臺灣大學
編號 : 58272
來源 : [36.229.43.35]
最後登入時間 :
2023-01-13 06:10:52
d120. 10699 - Count the factors -- UVa10699 | From: [36.230.200.112] | 發表日期 : 2018-03-11 01:04

雖然沒辦法壓到6ms (AC (36ms, 76KB)),

但小弟我有個不用建質數表就可以AC的解題方法:

 

以 259308 這個數字為例,我們從 2 開始對這個數字進行除法,除到無法整除時,就將除數加上 1:

259308 ÷ 2 = 129654

129654 ÷ 2 = 64827

此時可以發現 64827 已經無法被 2 整除,接下來改用 3:

64827 ÷ 3 = 21609

21609 ÷ 3 = 7203

7203 ÷ 3 = 2401

此時可以發現 115463 已經無法被 3 整除,接下來原本應該用 4 當除數,但可以發現,這個數字絕對不是 4 的倍數,因為在除以 2 時已經把質因數 2 的部分除掉了;

依此類推,所以其實並不用建表,只要從 2 一直除下去,直到原本的數字變成 1 ,然後在計算過程中紀錄曾經可以整除的數字有幾個就可以了;

過程中無法一次都無法整除的數字就是合數或不是原數字的因數的質數。

我們把剛剛的計算繼續完成,接下來的 4 、 5 、 6 都無法整除2401:

2401 ÷ 7 = 343

343 ÷ 7 = 49

49 ÷ 7 =  7

7 ÷ 7 = 1

運算結束,

可以發現,過程中可以整除該數的有 2 、 3 、 7 ,所以應該輸出「259308 : 3」。

小弟的解題方式,如有錯誤請不吝指正,謝謝指教 m(._.)m

 
#15569: Re:不用建「質數表」的解法


wish.rirf@gmail.com (C++ 與我)

學校 : 臺北市私立薇閣高級中學
編號 : 82132
來源 : [36.224.41.96]
最後登入時間 :
2021-08-07 19:29:31
d120. 10699 - Count the factors -- UVa10699 | From: [111.243.15.234] | 發表日期 : 2018-10-14 14:26

雖然沒辦法壓到6ms (AC (36ms, 76KB)),

但小弟我有個不用建質數表就可以AC的解題方法:

 

以 259308 這個數字為例,我們從 2 開始對這個數字進行除法,除到無法整除時,就將除數加上 1:

259308 ÷ 2 = 129654

129654 ÷ 2 = 64827

此時可以發現 64827 已經無法被 2 整除,接下來改用 3:

64827 ÷ 3 = 21609

21609 ÷ 3 = 7203

7203 ÷ 3 = 2401

此時可以發現 115463 已經無法被 3 整除,接下來原本應該用 4 當除數,但可以發現,這個數字絕對不是 4 的倍數,因為在除以 2 時已經把質因數 2 的部分除掉了;

依此類推,所以其實並不用建表,只要從 2 一直除下去,直到原本的數字變成 1 ,然後在計算過程中紀錄曾經可以整除的數字有幾個就可以了;

過程中無法一次都無法整除的數字就是合數或不是原數字的因數的質數。

我們把剛剛的計算繼續完成,接下來的 4 、 5 、 6 都無法整除2401:

2401 ÷ 7 = 343

343 ÷ 7 = 49

49 ÷ 7 =  7

7 ÷ 7 = 1

運算結束,

可以發現,過程中可以整除該數的有 2 、 3 、 7 ,所以應該輸出「259308 : 3」。

小弟的解題方式,如有錯誤請不吝指正,謝謝指教 m(._.)m

我用你的方法拿16ms,328KB


 
ZeroJudge Forum