- 首先计算公式,假设k个连续正整数之和为sumk,第一个正整数为x,则sumk = x + (x+1) + ... + (x+k-1) = kx + k(k-1)/2, 则x = (n - (k*(k-1)/2))/k。
- 由于x必须是正整数,所以由给定的n和k计算得到的x如果为负数的话,则不存在满足条件的x,返回No;如果x为正数,判断一下x是否为整数,如果不是的话,将k加1,继续计算新的x,是的话,则找到了符合等式的正整数x,此时的k也是最小的。
- 当输出结果时,还要判断一下k是否大于100,如果大于100,仍然要输出No,否则可以正常输出k个连续正整数。
def solve(n,l):
k = l
while k <= 100:
tempx = (n - (k*(k-1)/2))/k
if tempx < 0:
print('No')
break
elif tempx%1 == 0:
break
else:
k += 1
if tempx >= 0:
if k <= 100:
result = []
for i in range(k):
result.append(int(tempx+i))
print(' '.join(str(i) for i in result))
else:
print('No')
if __name__ == '__main__':
rec = list(map(int, input().split(' ')))
result = solve(rec[0],rec[1])