《劍網 3 懷舊服》將於 7 月 30 日不刪檔全網上線
阿新 • • 發佈:2021-07-29
跟數列的分塊思路相似,但是絕對不一樣!!!
〇、題目
給出\(N\),求\(\sum\limits^{N}_{i=1}\lfloor \dfrac{N}{i}\rfloor\)
一、思路
就比如說\(N=20\)的時候,我們發現,這些商下取整後的結果為:
i: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
N/i | 20 | 10 | 6 | 5 | 4 | 3 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
觀察前面還沒什麼特點,但是到後面就很明顯:11到20一整段都是1。於是,我們想把商為一個數的這些除數分成一個塊。
我們對於每一個\(i\in {1,2,3,...,n}\)
二、程式碼
#include<bits/stdc++.h> using namespace std; long long n; long long c(){ long long ans=0,l=1,r;//l就是i,r是R,ans是最終答案 for(;l<=n;l=r+1){//l已經初始化了,從1到n看,每次最後l=r+1 long long t=n/l;//t是T r=n/t;//算出r ans+=(r-l+1)*t;//加上這個區間的和 } return ans;//返回 } int main(){//輸入輸出 cin>>n; cout<<c()<<endl; return 0; }
最後,求點贊,感謝你的閱讀!