[恢]hdu 1868

2011-12-20 05:55:00

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1868

题意:问n可以表示成连续数字和有多少种。

mark:和2058如出一辙。TLE了2次,忘记改成long long,算sqrt的时候有个8倍会溢出。

代码:

# include <stdio.h>
# include <math.h>


typedef long long ll ;



ll calc (ll b)
{
int ans = 0 ;
ll n, p ;
for (n = ((ll)sqrt(8*b+1)-1) / 2 ; n > 1 ; n--)
{
p = (2*b/n - n + 1) / 2 ;
if ((2*p+n-1)*n == 2*b)
ans ++ ;
}
return ans ;
}


int main ()
{
int n ;
while (~scanf ("%d", &n))
printf ("%d\n", calc(n)) ;
return 0 ;
}



posted @ 2012-01-06 22:47  Seraph2012  阅读(140)  评论(0编辑  收藏  举报