整数 拆分成连续正数序列

 
代码
    x = x*2;
    
/* n(1+n)/2 = x*/
    n 
= (int)sqrt(x); /* a*b =c^2  then a <= c <= b, so n <= sqrt(2x) <= n+1*/
    
for(; n >= 2; n--)
    {
        
if (x % n)
            
continue;
        a1 
= x / n - n + 1;
        
if (a1 % 2 == 0)
        {
            a1 
/= 2;
            show(a1, n);
            showed 
= 1;
        }
    }

 补充下思想:很简单,先算出可能序列的最大长度n

然后枚举每个n值,每个数位a, a+1, a+2, ..., a+(n-1),倒过来求a是否存在

posted @ 2010-09-07 00:43  断桥残雪  阅读(178)  评论(0编辑  收藏  举报