[蓝桥杯python] 最大分解
问题描述
给出一个正整数n,求一个和最大的序列a0,a1,a2,……,ap,满足n=a0>a1>a2>……>ap且ai+1是ai的约数,输出a1+a2+……+ap的最大值
1、资源限制
资源限制
时间限制:1.0s 内存限制:256.0MB
2、输入格式
输入仅一行,包含一个正整数n
3、输出格式
一个正整数,表示最大的序列和,即a1+a2+……+ap的最大值
4、样式输入及输出
样例输入
10
样例输出
6
5、代码及解析
具体解析请大家自己看一下代码中的备注,在此不多做解释。
n = int(input())
nums = []
flag = 0
def digui(n):
#设置一个标志位,当最后一个数到1时就开始不再搜索
global flag
begin = n-1
while begin > 0:
if flag == 1:
return
# 约数就是后一个数能不能被前一个数整除
if n % begin == 0:
if begin == 1:
flag = 1
nums.append(begin)
#现在就以ai为开头继续往下搜索
digui(begin)
begin -= 1
digui(n)
result = 0
for i in range(len(nums)):
result += nums[i]
print(result)
结果:
自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!