1.题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1215
2.思路:
题目要求求所给数的所有因子之和。
可以采用筛选法,首先要知道每个数都有因数1,每个数的最大因数不超过它的1/2。
这样就可以用哈希表和筛选法做。
3,.参考代码:
#include <stdio.h>
#define num 500000
int a[num+1];
int main()
{
int t,n,i,j;
for(i=2;i<=num;i++) ///记得下标从1开始
a[i]=1; ///1是所有数的因子
for(i=2;i<=num/2;i++) ///采用素数筛选,将素数添加到素数的倍数和数组中,
{ ///记得下标i从2开始
for(j=2*i;j<=num;j+=i) ///计算因子之和
a[j]+=i;
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}