题目:

把正整数n分解成若干个互不相等的自然数的和,且使这些自然数的乘积最大。请你编写一个算法,由键盘输入n,求满足条件的分解方案。

输入: n (3<=n<=1000)

输出:乘积

分析:如果不探究解析方法而去盲目搜索所有分解方案的话,代价相当大。但其中是有数学规律滴…(这里让正整数是s,分解个数是n哈)
s = a 1 + a 2 + , ⋯ , + a n ( 1 ⩽ a 1 < a 2 < ⋯ < a n ) a 1 + a 2 2 ⩾ a 1 a 2 ( a 1 + a 2 + ⋯ + a n n ) ⩾ a 1 a 2 ⋯ a n n , 即  ( s n ) n ⩾ a 1 a 2 ⋯ a n \begin{array}{c} s=a_{1}+a_{2}+, \cdots,+a_{n} \quad\left(1 \leqslant a_{1}<a_{2}<\cdots<a_{n}\right)\\\\ \frac{a_{1}+a_{2}}{2} \geqslant \sqrt{a_{1} a_{2}} \\\\ \left(\frac{a_{1}+a_{2}+\cdots+a_{n}}{n}\right) \geqslant \sqrt[n]{a_{1}a_{2}\cdots a_{n}}, \text { 即 }\left(\frac{s}{n}\right)^{n} \geqslant a_{1}a_{2}\cdots a_{n} \end{array} s=a1​+a2​+,⋯,+an​(1⩽a1​<a2​<⋯<an​)2a1​+a2​​⩾a1​a2​ ​(na1​+a2​+⋯+an​​)⩾na1​a2​⋯an​ ​, 即 (ns​)n⩾a1​a2​⋯an​​

  1. a1>1
  2. 1<=ai+1-ai<=2,因为如果出现>2,可以将ai+1、ai改为ai+1-1、ai+1,使得到的乘积更大
  3. 最多只有一个i,使得ai+1-ai=2 ⬅为了让拆的数尽量多。。这里感觉不太严谨,跟数学建模出了个策略似的((谁来告诉我怎么证QAQ

总结策略如下:

把数按自然数顺序拆成2, 3, 4…an, an+1, an+1里是拆剩下的数。当an+1<=an时不合题意,要把它拆了分给前边的数。

  1. an+1=an时,因为an及之后的数每数加1还剩个1,只能把这个1分给an
  2. 1<an+1<an时,从an起向a1走,每个数挨个加1
  3. an+1=1时,只能加到ai

3,4这俩数比较特殊,如果必须拆的话只能拆成1+2、1+3。

太辣鸡了只会用python了

s=int(input())
if s==3 or s==4:result=s-1
else:divd=[]a=2while s>=a:s-=adivd.append(a)a+=1if s==1:divd[-1]+=1elif s==a-1:for i in range(a-2):#a-2:现在拆了n项(an+1不算进去)divd[i]+=1divd[-1]+=1else:i=a-3#第n项的下标while s>0:divd[i]+=1s-=1i-=1result=1for num in divd:result*=numprint('%d'%result)

自然数分解求最大乘积相关推荐

  1. [01] 动态规划-自然数分割求最大乘积

    @动态规划-之自然数分割求最大乘积 问题描述 给定长度为n的木棍,请把它锯称m段,(m,n都是整数,n > 1, m > 1).每段木棍的长度记为k[1].k[2].--.k[m].求k[ ...

  2. 自然数分解:任何一个自然数m的立方均可写成m个连续奇数之和。编程实现:输入一自然数 n,求组成 n3的 n个连续奇数。

    标题 自然数分解 类别 流程控制 时间限制 2S 内存限制 1000Kb 问题描述 任何一个自然数m的立方均可写成m个连续奇数之和.例如: 13=1 23=3+5 33=7+9+11 43=13+15 ...

  3. LU分解法c语言程序设计,矩陣LU分解求逆详细分析与C语言实现.doc

    矩陣LU分解求逆详细分析与C语言实现 题目要求 给定一个多维矩阵,实现该矩阵的求逆运算. 1.理论分析 矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将一个n阶矩阵A分解为一个下三角矩阵L和 ...

  4. 11091 最优自然数分解问题

    问题描述: 设n是一个正整数. (1)现在将n分解为若干个互不相同的自然数之和,且使这些自然数的乘积最大. (2)现在将n分解为若干个自然数之和,且使这些自然数的乘积最大. 编程任务:对于给定的正整数 ...

  5. LU分解求线性方程组的解

    LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...

  6. c语言10 u0010求余怎么求,矩阵LU分解求逆详细分析与C语言实现.docx

    题目要求 给定一个多维矩阵,实现该矩阵的求逆运算. 1.理论分析 矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将 一个n阶矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积.所 以首先对 ...

  7. 计算方法LU分解c语言程序解线性方程组,LU分解求线性方程组的解

    LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...

  8. 1到1亿的自然数,求所有数的拆分后的数字之和

    1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2.8.6,如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1 /*** 1到1亿的自然数,求 ...

  9. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法

    C语言实现数值分析中带双步位移的QR分解求特征值算法. 数 值 分 析(B) 大 作 业(二) 1.算法设计: ①矩阵的拟上三角化: 对实矩阵A进行相似变换化为拟上三角矩阵A(n 1),其变换矩阵采用 ...

最新文章

  1. MongoDB探索之路(二)——系统设计之CRUD
  2. 封装,多态,类的约束,super()深入了解
  3. 激光点云格式转换 bin 相互 pcd转换
  4. 博士申请 | 香港中文大学(深圳)罗元教授招收计算机与信息工程全奖博士
  5. Java代码判断数据库中某张表是否存在
  6. 恶意软件盯上了加密货币,两家以色列公司受到攻击
  7. XidianOJ 1019 自然数的秘密
  8. [react] react中修改prop引发的生命周期有哪几个?
  9. java编程思想第四版第十四章 类型信息习题
  10. Visual Graph图形控件的高级应用
  11. 数据库表的建立与基本操作
  12. access 知乎 窗体_ACCESS数据可视化之路
  13. 数据分析——鸢尾花数据集
  14. Log4j2 漏洞检测工具清单
  15. linux .deb文件安装
  16. 王者荣耀android看不见iOS,王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了...
  17. 任务16:16_Flume案例_断点续传文件(案例测试)
  18. 学习《图说设计模式》建造者模式
  19. LIN总线:主动进气栅格系统执行器(AGS/AGM)
  20. idea中JD-Intellij插件如何使用以及Luyten的使用

热门文章

  1. spring创建bean模式singleton与prototype的区别
  2. Cutterman插件安装及使用说明
  3. javaScript与jQuery中Window对象
  4. 图像处理——饱和度与色调
  5. 数字图像处理-第十周-理论课
  6. 【论文学习】基于贝叶斯分类的大学生关注热点事件微博文本分类方法研究——殷复莲 张晓宇 冯晴
  7. [NOI2005]瑰丽华尔兹(DP+单调队列优化)
  8. 一念逍遥显示服务器列表失败,《一念逍遥》进不去解决方法
  9. c++技巧——Printf 打印彩色字体
  10. STM32哪些引脚默认高电平