题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果 有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。
例如,对于 15 ,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于 16 ,其输出结果是:
NONE
def Devide_1(K):
p=1;
a=[1]
sum=1;
found_ans=False;
while p<K:
if sum<K:
p+=1
a.append(p)
sum+=p
elif sum>K:
sum-=a[0]
del a[0]
else:
found_ans=True
print "+".join(str(i) for i in a),"=",sum
p+=1
a.append(p)
sum+=p
if found_ans == False:
print "None for ",K
Devide_1(15)
Devide_1(16)
Devide_1(1000)
def Devide_2(K):
m=1;
T=2*K
found_ans=False;
while m<K:
m+=1
if T%m==0 and (T/m-m-1)%2==0:
n=(T/m-m-1)/2
if n<0:
break;
else:
found_ans=True
print "+".join(str(i) for i in range(n+1,n+m+1)),"=",K
if found_ans == False:
print "None for ",K
Devide_2(15)
Devide_2(16)
Devide_2(1000)