浏览器标题切换
浏览器标题切换end
把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

[bzoj 1968][Ahoi2005]COMMON 约数研究

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

 

posted @ 2018-08-31 20:35  henry_y  阅读(173)  评论(0编辑  收藏  举报