题目描述
给个n,求1到n的所有数的约数个数的和~
输入描述:
第一行一个正整数n
输出描述:
输出一个整数,表示答案
示例1
输入
3
输出
5
说明
样例解释: 1有1个约数1 2有2个约数1,2 3有2个约数1,3
备注:
n <= 100000000
分析: 参考素数筛法,考虑n,在[1,n]中,有n/2个2的倍数的数字,同理n/3为3的倍数的数,所有的约数也就是把所有的除数相加下即可,这里可以做一个简单的优化,就是(n/2,n]中只剩1个约数了,例如n = 12 ,当x = {7,8,9,10…..},约数只有一个。
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n,sum=0;;
scanf("%d",&n);
for(int i=1;i<=n;i++){
sum+=n/i;
}
printf("%d\n",sum);
return 0;
}