題目
看到題解區很多人直接給出結論:答案為 \(\displaystyle \sum_^n\lfloor\rfloor\) ,沒給出證明,這裡給出證明
首先,我們可以知道 \(\displaystyle f(n)=\sum_1\)
有的同學看不懂這個公式,我解釋一下,這個公式表達:
列舉 \(n\) 的因數 \(d\),每列舉乙個因數 \(d\), \(f(n)\) 加 \(1\)
\(d\mid n\) 指 \(d\) 是 \(n\) 的因數這樣一來,我們就可以和題目的對應上了: \(f(n)\) 代表 \(n\) 的因數個數
\(\displaystyle f(n)=\sum_1\) 還有一種表達方式是 \(\displaystyle f(n)=\sum_^n[d\mid n]\)
後面那個鬼東西 \([d\mid n]\) 是乙個判斷正誤的函式,正確為 \(1\) ,錯誤為 \(0\)
這個應該理解起來也不難:
列舉每乙個數 \(d\) ,當 \(d\) 是 \(n\) 的因數時, \(f(n)\) 加 \(1\)
題目要求的 \(\displaystyle m=\sum_^n f(i)\)
我們代入上面的定義式:
\(\quad \displaystyle m\)
\(\displaystyle=\sum_^n\sum_1\)
\(\displaystyle=\sum_^n\sum_^i[d\mid i]\)
我們調換一下列舉的順序,把 \(d\) 的列舉提前。
相當於考慮 \(d=1\) 時,對 \(i=1,2,3\dots n\) 的貢獻; \(d=2\) 時對 \(i=1,2,3\dots n\) 的貢獻; \(\dots\) ;\(d=n\) 時對 \(i=1,2,3\dots n\) 的貢獻\(\displaystyle=\sum_^n\sum_^n[d\mid i]\)
對於乙個固定的 \(d\) ,\(\displaystyle\sum_^n[d\mid i]\) 的意義非常直觀:
\(1\)~\(n\) 中,有多少個數以 \(d\) 為因數,即多少個數是 \(d\) 的倍數
應該是 \(\lfloor\rfloor\) 吧
所以我們得到 \(\displaystyle m=\sum_^n\lfloor\rfloor\)
那本蒟蒻就放 我碼風極醜的 **了:
c++ 版:
#includeusing namespace std;
int main(){
int n,ans=0;
cin>>n;
for(int i=1;i<=n;i++) ans+=n/i;
coutans=0
n=int(input())
for i in range(1,n+1):
ans+=n//i
print(ans)
最後安利一下本蒟蒻的部落格 P1403 AHOI2005 約數研究
科學家們在samuel星球上的探險得到了豐富的能源儲備,這使得空間站中大型計算機 samuel ii 的長時間運算成為了可能。由於在去年一年的辛苦工作取得了不錯的成績,小聯被允許用 samuel ii 進行數學研究。小聯最近在研究和約數有關的問題,他統計每個正數n的約數的個數,並以f n 來表示。例...
P1403 AHOI2005 約數研究
這裡還是用到辣個公式 sum nd 1 i sum n lfloor frac rfloor 注意 這個公式對總體成立,對個體不成立!所以你就有兩種思路 轉化為 餘數求和 那種思路,使用除法分塊來解決這打道題。直接上線性篩 我的思路 線性篩怎麼求出約數個數?乙個數 x 可以分解質因數變成這樣的樣子 ...
洛谷 p1403 AHOI2005 約數研究
題目描述 科學家們在samuel星球上的探險得到了豐富的能源儲備,這使得空間站中大型計算機 samuel ii 的長時間運算成為了可能。由於在去年一年的辛苦工作取得了不錯的成績,小聯被允許用 samuel ii 進行數學研究。小聯最近在研究和約數有關的問題,他統計每個正數n的約數的個數,並以f n ...