給定 \(n \le 10^7,k\),求 \(\sum_^n \sigma_k (i)\),其中 \(\sigma_k(n)=\sum_ d^k\)。
自然想到交換求和順序,即
\[\sum_^n \sigma_k(i) =\sum_^n \sum_ d^k=\sum_^n[\frac n i]i^k
\]於是,不妨設 \(f(i)=i^k\),則我們可以對每個 \(f(i)\) 在 \(o(\log n)\) 時間內計算,故總時間複雜度為 \(o(n\log n)\)。由於評測機很快,這樣已經能卡過去了。
考慮到 \(f(i)\) 是完全積性的,我們可以分出 \(i\) 對最小素因子 \(p_i\),利用線性篩計算所有合數的 \(f(i)\)。這樣複雜度為 \(o(n+\frac n \log n)=o(n)\),可以接受。
#include using namespace std;
#define int long long
const int n = 10000005;
const int mod = 1e9+7;
int isp[n],vp[n],f[n],pcnt,n,k,ans;
int qpow(int p,int q)
signed main()
for(int i=2;i<=n;i++)
for(int j=1;j<=pcnt&&vp[j]*i<=n;j++)
}for(int i=1;i<=n;i++)
cout<<(ans+n)%mod/system("pause");
}
LOJ 124 除數函式求和 1
題目描述 sigma k n sum d k 求 sum n sigma k i 的值對 109 取模的結果。輸入格式 第一行兩個正整數 n,k。輸出格式 第一行輸出答案。樣例輸入樣例 5 2 輸出樣例 63 資料範圍與提示 對於 100 的資料,1 n,k 107 7 solution 本題zyy...
loj124 除數函式求和 1
loj124 除數函式求和 1 sum n sum d k sum n i k 不能直接數論分塊了,但是一看資料範圍,可以線性篩啊 怎麼篩呢?可以把所有的 i k 篩出來。就是質數直接算,其他的根據 a b k a k b k 在被篩掉的時候遞推出來。1 include2 include3 incl...