整数分解
题目描述
一个整数可以由连续的自然数之和来表示。
给定一个整数,计算该整数有几种连续自然数之和的表达式,
并打印出每一种表达式。
输入描述
一个目标整数t,1 <= t <= 1000
输出描述
该整数的所有表达式和表达式的个数
如果有多种表达式,自然数个数最少的表达式优先输出
每个表达式中按自然数递增输出
具体的格式参见样例
在每个测试数据结束时,输出一行Result:X
其中X是最终的表达式个数
示例一
输入
9
输出
9=9
9=4+5
9=2+3+4
Result:3
说明
整数9有三种表达方法
示例二
输入
10
输出
10=10
10=1+2+3+4
Result:2
上代码
def int_resolve(num):
print(f"{num}={num}") # 输出要分解的等式
num_list = [] # 存储分解出来的等式
for i in range(1, num): # 枚举所有可能的连续正整数序列
sum_num = 0 # 记录序列的和
bulid = [] # 存储当前序列中的数值
for j in range(i, num): # 继续枚举序列中的数值
sum_num += j # 将当前数值加入序列
bulid.append(str(j)) # 将当前数值添加到序列中
if sum_num == num: # 如果序列之和等于目标数值
num_list.append(f"{num}={'+'.join(bulid)}") # 将等式添加到列表中
break
elif sum_num > num: # 如果序列之和大于目标数值
break # 退出当前循环
num_list.sort(key=len) # 按等式字符串长度排序
for i in num_list: # 输出所有分解出来的等式
print(i)
print(f"Result:{len(num_list) + 1}") # 输出计算结果(等式个数加一)
if __name__ == "__main__":
num = int(input())
int_resolve(num)
