Description
Input
只有一行一个整数 N(0 < N < 1000000)。
Output
只有一行输出,为整数M,即f(1)到f(N)的累加和。
Sample Input
3
Sample Output
5
题解
水题一道...不过思路还是比较难想的
这题求的是1到n中的每个数的约数之和
我们可以换一个方面来想,对于1到n的每个数,它对答案的贡献是多少,也就是说,它有多少个倍数在n以内
所以每个数对答案的贡献就是$n/i$(这里的除法是向下取整的)
$O(n)$扫一遍就行
据说还有$O(2\sqrt{n})$的做法
#include <bits/stdc++.h> using namespace std; int n; long long ans=0; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) ans+=n/i; printf("%lld\n",ans); return 0; }