2011-12-25 10:20:50
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1215
题意:问n的真因子和。
mark:这题可以说是不会,题目数据量是50w,我直接搜到sqrt(n),复杂度应该是O(n*sqrt(n)),大约是700*50w = 3.5亿。
若不是数据水,理应TLE的。
感觉正统的做法是分解素因子后组合。素因子最多不超过log(n)个,约20个,然后组合。感觉还是有可能TLE。
代码:
# include <stdio.h>
# include <math.h>
int calc(int n)
{
int sum = -n, i, limit = sqrt(n*1.0) ;
for (i = 1 ; i <= limit ; i++)
if (n%i==0) sum += i + n/i;
if (limit*limit == n) sum -= limit ;
return sum ;
}
int main ()
{
int n ;
scanf ("%d", &n) ;
while (~scanf ("%d", &n))
printf ("%d\n", calc(n)) ;
return 0 ;
}