# 一个正整数有可能可以被表示为n(n≥2)个连续的正整数之和,如n=15时, # 15=1+2+3+4+5 # 15=4+5+6 # 15=7+8 # 请编写算法,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 # 需要找到所有可能的连续正整数序列,这些序列的和等于给定的正整数 N 。 # 考虑到一个连续的正整数序列 a, a+1, a+2, ..., a+(k-1) ,和可以表示为: # # S = a + (a + 1) + (a + 2) + ... + (a + k - 1) # # 简化为: # # S = k * a + (k*(k - 1)) / 2 # # S 是给定的正整数 N,a 是序列的起始数,k 是序列中的项数。 # # 所以有: # # N = k * a + (k*(k - 1)) / 2 # # 即: # # 2N = k * (2a + k - 1) # # 为了找到所有满足条件的序列,从 2 开始遍历可能的 k 值,直到 k*(k-1) < 2N为止,检查是否有整数 a 使得上面的等式成立。 def find_consecutive_sequences(N): result = [] k = 2 while k * (k - 1) < 2 * N: if (2 * N - k * (k - 1)) % (2 * k) == 0: a = (2 * N - k * (k - 1)) // (2 * k) sequence = [a + i for i in range(k)] result.append(sequence) k += 1 return result N = 15 sequences = find_consecutive_sequences(N) for seq in sequences: print(seq)