BZOJ3994 SDOI2015 約數個數和

2022-03-29 21:03:01 字數 1278 閱讀 2301

bzoj3994: [sdoi2015]約數個數和

設d(x)為x的約數個數,給定n、m,求

輸入檔案包含多組測試資料。

第一行,乙個整數t,表示測試資料的組數。

接下來的t行,每行兩個整數n、m。

t行,每行乙個整數,表示你所求的答案。

27 4

5 6110

1211<=n, m<=50000

1<=t<=50000

題解here!

看到兩個求和符號,立馬想到 莫比烏斯反演。

但是那個 d(ij) 怎麼辦?

沒事,我們有:

你會知道這個玩意的值就是每個數約數個數的字首和

因為乙個數的約數個數是積性函式,可以線性篩

所以這個可以 o(n)預處理

接下來的東西就比較好算了

很明顯,數論分塊。

所以再預處理一下 μ(i) 的字首和就行了。

附**:

#include#include#include#define maxn 50010

using namespace std;

int k=0,prime[maxn],mu[maxn],sum[maxn];

long long f[maxn];

bool np[maxn];

inline int read()

while(c>='0'&&c<='9')

return date*w;

}void make()

for(int j=1;j<=k&&prime[j]*i<=m;j++)

} for(int i=1;i<=m;i++)sum[i]=sum[i-1]+mu[i];

for(int i=1;i<=m;i++)

f[i]=s; }}

void work()

printf("%lld\n",ans);

}int main()

bzoj 3994 SDOI2015 約數個數和

3994 sdoi2015 約數個數和 time limit 20 sec memory limit 128 mb submit 944 solved 653 submit status discuss description 設d x 為x的約數個數,給定n m,求 input 輸入檔案包含多組測...

BZOJ 3994 SDOI2015 約數個數和

設d x 為x的約數個數,給定n m,求 輸入檔案包含多組測試資料。第一行,乙個整數t,表示測試資料的組數。接下來的t行,每行兩個整數n m。t行,每行乙個整數,表示你所求的答案。27 4 5 6110 1211 n,m 50000 1 t 50000 round 1 感謝yts1999上傳 莫比烏...

BZOJ3994 SDOI2015 約數個數和

n leq 50000,m leq 50000 求 sum n sum md ij d ij sum sum a,b 1 把 a 選中的質因數的次數加上 j 的質因數次數,就是 a 算 比 j 次數多的質因子 b 算 次數不超過 j 的質因子 sum n sum md ij sum n sum m ...