今天之所以将约数研究,因为我觉得这个题的求解思路很特别。
我们先来看一下思路:对于1≤i≤n来说,i的倍数有n/i个,i作为约数出现了n/i次。
可为什么呢?
我们来看一下样例 3 就是 3 / 1 = 3,3 / 2 = 1,3 / 3 = 1。
我们来看一下,
1在3中是不是有3个倍数,2有1个,3有1个。
所以,让我们来看一下代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
LL ans = 0;
for (int i = 1; i <= n; i++)
ans += n / i; // i的倍数有n/i个,是 n/i个数字的约数
printf("%lld\n", ans);
return 0;
}
谢谢大家,有问题欢迎留言。