先看題目:
數字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...