版权声明:_ https://blog.csdn.net/lunch__/article/details/82831067
题意
- 求二元组(a, b)(a,b<=n) 满足(a % b) = b / a的个数,n<=1e12
考虑分开算贡献
的时候
那么就是求 的个数
这个东西枚举 直接算就可以了
的时候
那么就是求 的约数个数
我们反过来枚举b的倍数 个
直接整除分块就可以了
复杂度
Codes
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
//freopen("diyiti.in", "r", stdin);
//freopen("diyiti.out", "w", stdout);
int r, now = 1, ans = 0, n; cin >> n;
for(int l = 1; l <= n; l = r + 1) {
r = n / (n / l);
ans += (r - l + 1) * (n / l - 1);
}
for(int i = 2; i * i <= n; ++ i)
ans += min(n + 1, i * (i + 1)) - i * i;
cout << ans << endl;
return 0;
}