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