例题一
\[\sum_{i=1}^n \lfloor\frac n i\rfloor\\
\]
注意到函数\(y=\lfloor\dfrac n x\rfloor\的图像如下:
这启发我们根据\(y\值,把\(x\分组,每组“打包”算好。
虽然图像上看\(y\的数量很大,但是考虑到许多\(y\不包含整数的\(x\,因此时间复杂度就是这样的了。
for(LL l=1,r;l<=n;l=r+1
{
r=n/(n/l;
ans+=(n/l*(r-l+1;
}
例题二
\[\sum_{i=1}^nk\bmod i\\
\]
对原式进行推导:
\[\sum_{i=1}^nk\bmod i\\
=\sum_{i=1}^nk-i\lfloor\frac k i\rfloor\\
=nk-\sum_{i=1}^ni\lfloor\frac k i\rfloor\\
\]
代码实现如下:
ans=n*k;
for(LL l=1,r;l<=n&&l<=k;l=r+1
{
r=min(k/(k/l,n;
ans-=(k/l*(r+l*(r-l+1/2;
}
例题三
函数 \(f(i\ 表示 \(i\ 所有约数的和。
考虑前缀和作差,问题变成\([1,R]-[1,L-1]\。
例题四
\[\sum_{i=1}^n\sum_{j=1}^m (n\bmod i(m\bmod j\\
\]
这道题显然也是推导。
\[\sum_{i=1}^n\sum_{j=1}^m (n\bmod i(m\bmod i\\
=\sum_{i=1}^n(n\bmod i\sum_{j=1}^m (m\bmod j\\
=\sum_{i=1}^n(n-i\lfloor\frac n i\rfloor\sum_{j=1}^m (m-j\lfloor\frac m j\rfloor\\
=(n^2-\sum_{i=1}^n i\lfloor\frac n i\rfloor(m^2-\sum_{j=1}^m m\lfloor\frac m j\rfloor\\
\]
例题五
\[\sum_{i=1}^n (n\bmod i(m\bmod i\\
\]
和上道题看着很像,不过这道题就很复杂了。
\[\sum_{i=1}^n (n\bmod i(m\bmod i\\
=\sum_{i=1}^n (n-i\lfloor\frac n i\rfloor(m-i\lfloor\frac m i\rfloor\\
=\sum_{i=1}^n (nm-(n+mi\lfloor\frac n i\rfloor+i^2\lfloor\frac n i\rfloor\lfloor\frac m i\rfloor\\
=n^2m-(n+m\sum_{i=1}^n i\lfloor\frac n i\rfloor+\sum_{i=1}^n i^2\lfloor\dfrac n i\rfloor\lfloor\frac m i\rfloor\\
\]
具体思想如下:
因此找出 \(\lfloor\dfrac n x\rfloor\ 变化的点和 \(\lfloor\dfrac m x\rfloor\ 变化的点中最近的一个,作为我们的 \(r\ 值。
for(LL l=1,r=0;l<=n;l=r+1
{
r=min(n/(n/l,m/(m/l;
ans=ans+(n/l*(m/l*(sum(r-sum(l-1;
}
这里出现了一个函数,它的作用是求出:\(sum_i=\sum\limits_{i=1}^ni^2\。
公式是 \(\sum\limits_{i=1}^ni^2=\dfrac {n(n+1\times(2n+1} 6\,用数学归纳法很好证明,这里不多赘述了。