洛谷Oj-约数研究-数学

来源:互联网 发布:金十数据新闻 编辑:程序博客网 时间:2024/06/01 21:31

问题描述
小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示。例如12的约数有1、2、3、4、6、12。因此f(12)=6。下表给出了一些f(N)的取值:

AC代码

int main(){    int n,i,sum=0;    scanf("%d",&n);//输入    for(i=1;i<=n;i++)        sum+=n/i;    printf("%d\n",sum);//输出    return 0; }

解决方法
本题一定要注意超时问题,如果一个一个数算其约数的个数再加起来的话,会超时。把问题转化为1到n中1到n的倍数的个数。最近在《编程之美-微软技术面试心得》上看到了这样一个公式:[N/k]等于1,2,3,……,N中能被k整除的数的个数
,于是愉快地用上这个公式。
约数⇌倍数