链接
题目描述
记
f
i
f_i
fi为
i
i
i 的约数个数。
给出
l
l
l 和
r
r
r,求
∑
i
=
l
r
f
i
\sum\limits_{i = l} ^ r f_i
i=l∑rfi 。
样例输入
2 6
样例输出
13
思路
啊这,l,r都很大
所以不能暴力
因为是和,那我们可以考虑前缀和
∑
i
=
l
r
f
i
\sum\limits_{i = l} ^ r f_i
i=l∑rfi =
∑
i
=
1
r
f
i
−
∑
i
=
1
l
−
1
f
i
\sum\limits_{i = 1}^r f_i - \sum\limits_{i = 1}^{l - 1}f_i
i=1∑rfi−i=1∑l−1fi
然后不就好起来了吗
代码
#include <cstdio>
int l, r;
long long ans1, ans2;
int main() {
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
scanf("%d%d", &l, &r);
--l;
for (int i = 1; i <= r; ++i) {
ans1 += (l / i);//求出1~l-1的
ans2 += (r / i);//求出1~r的
}
printf("%lld", ans2 - ans1);
fclose(stdin);
fclose(stdout);
}