最大乘积
题目描述
一个正整数一般可以分为几个互不相同的自然数的和,如 3 = 1 + 2 3=1+2 3=1+2, 4 = 1 + 3 4=1+3 4=1+3, 5 = 1 + 4 = 2 + 3 5=1+4=2+3 5=1+4=2+3, 6 = 1 + 5 = 2 + 4 6=1+5=2+4 6=1+5=2+4。
现在你的任务是将指定的正整数 n n n 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。
输入格式
只一个正整数 n n n,( 3 ≤ n ≤ 10000 3 \leq n \leq 10000 3≤n≤10000)。
输出格式
第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。
第二行是最大的乘积。
样例 #1
样例输入 #1
10
样例输出 #1
2 3 5
30
思路摘要
·这些数互不相同
·构造2+3+……+a+b=n2,3,……,a为公差为1的等差数列。b为小于(a+1)的数。
·把b尽可能地均分给(2+3+……+a)先均分,每个都加(最多为1)再分配,从大往小给数值+1
a=list()
n=int(input())
ans=1for i in range(2,n):if i<=n:a.append(i)n-=ielse:breakx=n//len(a)#均分
y=n%len(a)#均分后剩余的,给个别的分
if y!=0:for i in range(len(a)-y,len(a)):a[i]=a[i]+1for i in range(len(a)):a[i]=a[i]+xprint(a[i],end=" ")ans*=a[i]
print()
print(ans)