整数分块这样的方法使用与计算n以内的n/i的和;
for example
以n = 10为例子
我们发现
这样我们就把10的计算转化为只需要5次的计算
在我们的计算下面,在理论上是可以logn的计算的
ll res = 0;
for(int l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);//定义右边界
res += (r - l + 1) * (n / l);
}
整数分块这样的方法使用与计算n以内的n/i的和;
for example
以n = 10为例子
我们发现
这样我们就把10的计算转化为只需要5次的计算
在我们的计算下面,在理论上是可以logn的计算的
ll res = 0;
for(int l = 1, r; l <= n; l = r + 1)
{
r = n / (n / l);//定义右边界
res += (r - l + 1) * (n / l);
}