题目18-python华为原题题库- 整数分解

整数分解用连续自然数之和来表达整数

题目

一个整数可以由连续的自然数之和来表示。
给定一个整数,计算该整数有几种连续自然数之和的表达式,
并打印出每一种表达式。

输入

一个目标整数 t1 <= t <= 1000

输出

  1. 该整数的所有表达式和表达式的个数,如果有多种表达式,自然数个数最少的表达式优先输出

  2. 每个表达式中按自然数递增输出

    具体的格式参见样例

    在每个测试数据结束时,输出一行 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

解题思路

求一个正整数 t 的正整数分解,并对所有分解结果按照分解出的数字个数从小到大排序后输出。

核心知识点

求和公式。

Python 代码实现

import math

n = 9
n2 = n * 2
fl = []
for i in range(1, int(math.sqrt(n2) + 1)):
    if n2 % i == 0:
        i2 = n2 // i
        if (i2 - i) % 2 == 0:
            continue
        sx = (i2 - i + 1) // 2
        fl.append([j for j in range(sx, sx + i)])
for i in fl:
    print(f"{n}={'+'.join(map(str,i))}")
print(f'Result:{len(fl)}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值