题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
有些数可以写成连续N(>1)个自然数之和,比如14=2+3+4+5;有些不能,比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢?
一个数M若可以写成以a开头的连续n个自然数之和,则M=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a!=0,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-n*(n-1)/2)%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(M)*2,还可以输出所有解。
void divide(int num)
{
int i,j,a;
for(i=2; i<=sqrt((float)num)*2; ++i)
{
if((num-i*(i-1)/2)%i==0)
{
a=(num-i*(i-1)/2)/i;
if(a>0)
{</