算法
(数学) $O(n)$
注意到 $a * b + c = n$,而 $c = n - a * b >= 1$,于是我们可以得到 $a * b <= n - 1$,即 $b <= (n - 1) / a$
比如 $a = 3$, $n - 1 = 100$,那么 $b \leq 33$,也就是 $b \in [1, 33]$,所以我们可以把 33
统计到答案中。
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<int, int>;
int main() {
int n;
cin >> n;
ll ans = 0;
for (int a = 1; a <= n; ++a) {
ans += (n - 1) / a;
}
cout << ans << '\n';
return 0;
}