题目
简化题意
(f(x)) 表示 (sumlimits_{i = 1} ^ {x} [imid x]) 求 (sumlimits_{i = 1}^{n} f(i))。
思路
整除分块。
一个数 (i) 在 (1 sim n) 中它的倍数一共有 (leftlfloor dfrac{n}{i} ight floor) 个,即 (i) 对答案的贡献为 (leftlfloor dfrac{n}{i} ight floor)。
考虑枚举约数,(sumlimits_{i = 1} ^ {n} leftlfloor dfrac{n}{i} ight floor) 就是答案。
Code
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
int n, ans;
int main() {
scanf("%d", &n);
for (int i = 1, j; i <= n; i = j + 1) {
j = n / (n / i);
ans += (j - i + 1) * (n / i);
}
std::cout << ans << '
';
return 0;
}