篩選法 因子之和

2022-05-05 05:48:09 字數 786 閱讀 2156

先看題目:

數字n的因子就是所有比n小又能被n整除的所有正整數,如12的因子有1,2,3,4,6.現在給出乙個正整數,求其因子之和。

輸入資料的第一行是乙個數字t(1<=t<=500000),它表明測試資料的組數.然後是t組測試資料,每組測試資料只有乙個數字n(1<=n<=500000).

對於每組測試資料,請輸出輸入資料n的因子之和.

321020

1822

這是前幾天進行個人訓練賽遇到的題目,當時看到資料範圍只有500000,於是就想到暴力求解。結果這一暴力就

出問題了,oj毫不留情的給了個tle。想一想,從結果看來,應該是測試例項很多的原因,於是,這

直接導致全

場悲劇,ac率極低。遇到tle情況,無非就是優化演算法,這其中就有一種常用的方法,就是先把

所有的結果

給儲存起來,這樣虐時就不是問題了。先注意到任何乙個數的任何乙個因子是其約數,這個道

理大家都懂,但真

正注意到的人就少了。其實利用這個性質這道題解決了,即開乙個a[500000]的陣列,篩

選法,雙層迴圈進行累

加。為了縮減time,第一層從i=2開始,第二層從第j=i+i開始,依次a[j]+=i進行累

加,最後輸出時對每個因子和

加一就可以了,這樣就達到了儲存因子和的目的。

**如下:

#include#include#includeint main()

return 0;

}

其實,某些數學性質雖看起來並不起眼,但好好利用卻可以解決大問題。

篩選法 因子之和

先看題目 數字n的因子就是所有比n小又能被n整除的所有正整數,如12的因子有1,2,3,4,6.現在給出乙個正整數,求其因子之和。輸入資料的第一行是乙個數字t 1 t 500000 它表明測試資料的組數.然後是t組測試資料,每組測試資料只有乙個數字n 1 n 500000 對於每組測試資料,請輸出輸...

C Multiplicity dp 篩選因子

樸 素做 法 color 樸素做法 樸素做法設d p k 為當前序 列長k有 多少種選 法設dp k 為當前序列長k有多少種選法 設dp k 為當前序 列長k有 多少種選 法 那 麼對 於當前的 ai,篩 選ai的 所有因子 s那麼對於當前的a i,篩選a i的所有因子s 那麼對於當前 的ai 篩選...

數論 素數篩選法與整數的素因子分解

篩選法 求出n以內的素數,最快的應該是篩選法。篩選法的思路是 要求10000以內的素數,把1 10000都列出來,1不是素數,劃掉 2是素數,所有2的倍數都不是素數,劃掉 取出下乙個倖存的數,劃掉它的所有倍數 直到所有素數找完為止。這種做法的空間複雜度是o n 時間複雜度o n logn const...