這一題我是先建立質數表
並找出1~800中有哪些質數,並放在prime陣列中
然後再對2~500000找他的sopf值
我們可用剛剛prime陣列中的質數,來對其做質因數分解,並將結果相加,即可求得sopf值
我們不用擔心1~800的質數不夠用來做質因數分解
ex 以334142為例
334142的質數有2,所以334142/2 = 167071
接下來1~800的質數中沒有質數可以再整除167071,所以167071為質數
故334142 = 2 * 167071
sopf(334142) = 2 + 167071
最後有了2~500000每個數字的sopf值
利用dp(動態規劃)的方法可快速求到每個數的lsopf值
當某數j 其 sopf(j) = j,則lsopf(j) = 1
否則 sopf(j) = lsopf(sopf(j)) + 1
如此就一來找出了 2~500000個數的lsopf值了
這一題我是先建立質數表
並找出1~800中有哪些質數,並放在prime陣列中
然後再對2~500000找他的sopf值
我們可用剛剛prime陣列中的質數,來對其做質因數分解,並將結果相加,即可求得sopf值
我們不用擔心1~800的質數不夠用來做質因數分解
ex 以334142為例
334142的質數有2,所以334142/2 = 167071
接下來1~800的質數中沒有質數可以再整除167071,所以167071為質數
故334142 = 2 * 167071
sopf(334142) = 2 + 167071
最後有了2~500000每個數字的sopf值
利用dp(動態規劃)的方法可快速求到每個數的lsopf值
當某數j 其 sopf(j) = j,則lsopf(j) = 1
否則 sopf(j) = lsopf(sopf(j)) + 1
如此就一來找出了 2~500000個數的lsopf值了
補充一點
input值n>m時,要將n、m交換喔