整除分块
what is it?
我们来专心看一下下面这个式子
(sumlimits_{i=1}^n lfloor frac n i
floor)
(in general),我们会花(O(n))的时间解决
(however),我们会发现(lfloor frac {11} 6
floor==lfloor frac {11} 7
floor==lfloor frac {11} 8
floor)
换言之,从(lfloor frac n 1
floor)到(lfloor frac n n
floor),最多只会有(sqrt n)个数(证明有点复杂,可以自行BFS)
我们可以试着去枚举这(sqrt n)个数
然后会发现,同一个数个结尾是(lfloor frac n {lfloor frac n i
floor}
floor)
那么可以用下面这个代码解决……
int fenk(int n){
int tot=0;
for(int i=1,j;i<=n;i=j+1){
j=n/(n/i);
tot=tot+(n/i)*(j-i+1);
}
return tot;
}
because of the lack of the time
(That) (all)