整数分块
第一种题型
整数分块用于快速处理,形如:
通过推理可以发现,假设它的起始下标是l,那么它的结束下标为r = n / (n / l)。
例如当n = 5时,sum = 5 + 2 + 1 + 1 + 1;
[题目位置码题集](码蹄集 (matiji.net))
ACcode
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans, n, m, k,t,len, cnt = 0, minn = MAX_NUM,maxx = 0;
// 整数分块, 关键是找出连续的n/l值的左端点
int main() {
cin >> n;
for(int l = 1, r; l <= n; l = r+1) {
r = n / (n / l);
ans += (r-l+1) * (n/l);
}