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

题目描述:将一个正整数表示为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<a1<a2<n。

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

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");
		}
	}

转载请注明本文出处: http://blog.csdn.net/love254443233

你可能感兴趣的:(整数分解成多个连续的整数序列)