数论 整除分块 P3708题解
题面很直白,就不说了罢qaq
首先很明显,
这道题要是直接求的话复杂度是不对的,而他让我们求
对于后面的
-
i|n $ 很明显多了一个 $ i - 反正没有多
所以,后面的
所以就可以
由于自己太菜,不会线性筛
code:
#include<cstdio>
const int M=1e6+5;
int n;
long long ans,sigma[M];
signed main(){
int i,j;
scanf("%d",&n);
for(i=1;i<=n;++i){
for(j=i;j<=n;j+=i){
sigma[j]+=i;
}
}
for(i=1;i<=n;++i){
printf("%lld ",ans+=n-sigma[i]);
}
}