LOJ124 除數函式求和 1 線性篩

2022-06-06 17:27:09 字數 807 閱讀 2871

給定 \(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

}

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...