http://www.luogu.org/problem/show?pid=1403#sub
枚举一个数的约数肯定超时,那我们反过来想。
枚举1~n里约数i有多少个,那么很明显如果n=10,那么约数1有10/1=10个,约数2有10/2=5个,约数3有10/3=3个……
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int tot = 0;
for (int i=1;i<=n;i++) tot += n/i;
printf("%d\n", tot);
return 0;
}