分解正整数 (100)
- 给定一个正整数n, 如果能够分解为m(m>1)个连续的正整数之和,请输出所有分解中,m最小的分解;
- 如果给定整数无法分解为连续正整数之和,则输出“N”
输入描述:
输入一个正整数n, 范围在(1,2^30]
输出描述:
对输入21,输出如21=10+11
示例1
输入:
21
输出:
21=10+11
说明:
21=1+2+3+4+5+6
21=6+7+8
21=10+11
连续整数之和最少为2
思路:
- m最小为2,最大为 m*(m+1) / 2 <= n
- [ n − m ∗ ( m − 1 ) / 2 ] % m = = 0 [n - m*(m-1)/2] \% m == 0 [n−m∗(m−1)/2]%m==0 则可以分解为若干连续整数之和;拼接字符串,并break
n = int(input().strip())
m=2 # 最少为2
output_str=""
while m * (m + 1) / 2 <= n:
if (n - m * (m - 1) / 2) % m == 0:
output_str += str(n) + "="
for i in range(m):
output_str += str(int(((n - m * (m - 1) / 2) / m + i)))
if i != m - 1:
output_str +="+"
break
m += 1
if output_str == "":
print("N")
else :
print(output_str)