对于求一个数n的所有因数和,可能很多人的第一想法是遍历1~sqrt(n)来找其因数,但是这样做不好的地方就是我们可能会遍历大量没有用的数,浪费了很多时间,所以我们与其是求一个数的所有因数和不如求一个数在一个范围内是哪些数的因数,这样求解就可以省去大量的时间,从而达到预处理打表的效果。
#include <cstdio>
const int maxn = 500000+2;
int sum[maxn];
int main()
{
for(int i=1; i<maxn; i++)
for(int j=1; i*j<maxn; j++)
sum[i*j] += i;
int a;
while(scanf("%d",&a)!=EOF)
printf("%d\n",sum[a]);
return 0;
}