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;
}