题目描述
给个n,求1到n的所有数的约数个数的和~
输入描述:
第一行一个正整数n输出描述:
输出一个整数,表示答案
输入
复制
3输出
复制
5
说明
样例解释: 1有1个约数1 2有2个约数1,2 3有2个约数1,3备注:
n <= 100000000
正常想法是用一个双重循环对每个数的约数查找,发现是约数则加1,但是这样简单的想法当然是The Time Limited,所以要请出我们的数论了,数学还是非常重要的。
初次接触这样理解:
1~n的约数中都有1,即是1的倍数的数都有约数1;(约数1出现n次)
1~n中是2的倍数的数都有约数2;(约数2出现n/2次)
1~n中是3的倍数的数都有约数3;(约数3出现n/3次)
······
1~n中是n的倍数的数都有约数n;(约数n出现1次)
所以1到n的所有数的约数个数的和为sum(约数)=sum(1)+sum(2)+sum(3)+···+sum(n)=n + n/2 + n/3 + ··· +1
AC正解
#include<stdio.h>
int main()
{
int n,i;
int sum=0;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
sum+=n/i;
}
printf("%d",sum);
return 0;
}
实现就是简单的一步了,数学给赞 。