/*
输入一个正数n,输出所有和为n连续正数序列。
例如:输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
//*/
#include <iostream>
#include <iomanip>
#include <limits>
#include <cmath>
using namespace std;
int main(int argc, char** argv)
{
if(argc < 2)
return -1;
int k = atoi(argv[1]);
if(k%2){ // 奇数
cout << "sum of { " << k/2 << " " << k/2 + 1 << " } is " << k << endl;
for(int i = 3; i < k -1 ; i+=2){ // 对于任意偶数n(满足n>2)个连续整数相加,结果必为偶数
if(!(k%i)){
if( k/i - i/2 > 0){
cout << "sum of { ";
for(int idx = k/i - i/2; idx <= k/i + i/2; ++idx){
cout << idx << " ";
}
cout << "} is " << k << endl;
}
}
}
}else{
for(int i = 3; i < k - 1; i += 1){
if(!(k%i)){ // 奇数个连续整数和
if( k/i - i/2 > 0){
cout << "sum of { ";
for(int idx = k/i - i/2; idx <= k/i + i/2; ++idx){
cout << idx << " ";
}
cout << "} is " << k << endl;
}
}else if(!(i%2) && (k%i == i/2)){ // 偶数个连续整数和
if( k/i - (i-1)/2 > 0){
cout << "sum of { ";
for(int idx = k/i - (i-1)/2; idx <= k/i + i/2; ++idx){
cout << idx << " ";
}
cout << "} is " << k << endl;
}
}
}
}
return 0;
}