BZOJ1968: [Ahoi2005]COMMON 约数研究

【传送门:BZOJ1968


简要题意:

  给出n,求出1的约数个数+2的约数个数+...+n的约数个数


题解:

   乍一眼还挺容易理解,但是看数据范围,懵逼

  好吧,说实话,我是看数据规律才知道怎么做的

  但是更靠谱的是用数学方法,ans=1的n的约数和,那么其实我们直接把n/i累计起来就是答案了,比如说求约数1出现的个数就是n/1,约数2出现的个数就是n/2,十分神奇(Hanks_o大佬教的)


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int ans=0;
    for(int i=1;i<=n;i++) ans+=n/i;
    printf("%d
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/Never-mind/p/7750385.html