算法
(主客転倒) $O(n)$
本题有很多解法,这里只介绍一种 $O(n)$ 做法。
$$ \sum_{k = 1}^n kf(k) = \sum_{k = 1}^n \sum_{i = 1}^y k = \sum_{k = 1}^n \frac{y(y + 1)k}{2} $$
其中 $y = \lfloor \frac{n}{i} \rfloor$。
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using ll = long long;
ll f(ll n) { return n * (n + 1) / 2; }
int main() {
int n;
cin >> n;
ll ans = 0;
for (int i = 1; i <= n; ++i) {
ll r = n / i;
ans += f(r) * i;
}
cout << ans << '\n';
return 0;
}