整数分解成多个连续的整数序列

2014-11-24 10:46:24 · 作者: · 浏览: 4

题目描述:将一个正整数表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
输入任何一个正整数,找出符合这种要求的所有连续正整数序列。

如果没有找到,刚输出NULL

分析:利用差数列公式求解,假设输入整数n,n=(a1+a2)*(a2-a1+1)/2,0


基于这个方法,不难写出如下代码:


[java]
void separateIntoItems(long n) {
if (n <= 2) {
System.out.println("NULL");
return;
}
double max = Math.pow(2, 64);
if ((double) n > max) {
System.out.println("NULL");
return;
}
boolean isExist = false;
// a1 is the first number
for (int a1 = 1; a1 <= n / 2; a1++) {
// a2 is the last number
for (int a2 = a1 + 1; a2 < n; a2++) {
// if exist output the result
if ((a1 + a2) * (a2 - a1 + 1) == n * 2) {
isExist = true;
System.out.print(a1);
for (int t = a1 + 1; t <= a2; t++) {
System.out.print(" " + t);
}
System.out.println();
}
}
}
if (!isExist) {
System.out.println("NULL");
}
}