一個不大於n的正整數的約數個數期望意義下是多少?
01-05
嘗試證明某演算法時間複雜度時遇到的,比較糾結,想要把它算出來。
。
具體來說,記這個期望是 ,則明顯 ,其中 表示 的約數個數。考慮約數個數的意義並更換一下求和的次序,可以得到 ,其本質是從枚舉約數改為枚舉倍數。而顯然 ,因此 。
還有一種剛剛想到的更好理解的解釋。因為期望有線性性,所以我們只需考慮每個數是你選出的數的約數的概率即可。而 整除你選出的數的概率顯然是 ,求個和就能得到一樣的結論。
我們有
所以要求的其實是第一象限內雙曲線ab=x下的整點個數,把求和區域切割一下就得到了
對右邊使用一個簡單的漸近公式
就能算出來
從而看出來均階是
一個有趣的問題是上面式子的余項的階最好能到多少,猜測是 ,但是到目前為止依然是open的。
啊,這個簡單,n以內的數的約數也是n以內的數,對k來說,有[n/k]個數的約數中包含了k,按k求個和就得到所有數約數個數大概是n ln n,平均每個就接近ln n
期望為Divisor summatory function 除n,
所以期望
其中 為Euler-Mascheroni常數,約等於0.5772
在大n下該近似誤差不大,因為余項
既然是OI就要用OI的思維嘛233.估計是要分析 的值吧...
反過來想,考慮每個元素去找他的倍數來計算對答案的貢獻,有原式為:
,其中 為前n個調和數的和,利用積分解上下界,容易知道原式為 。平均來看就是 了。
推薦閱讀:
※為什麼在SPFA演算法中,判斷負權迴路的條件是任一節點進隊次數超過總結點數?
※在 codeforces 等信息學競賽平台,比賽被hack的瞬間是一種什麼樣的心情?
※如何評價NOI2016冬令營的題目?
※當你絞盡腦汁也想不明白一個演算法或者數據結構的時候,你會怎麼做?
※bfs能否解決一切dfs 問題?