[恢]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 ;
}