[恢]hdu 1215

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 ;
}



posted @ 2012-01-06 23:39  Seraph2012  阅读(147)  评论(0编辑  收藏  举报