题目:

把正整数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. java 折半插入排序_[Java代码] Java实现直接插入排序和折半插入排序算法示例
  2. JS 实现可停顿的垂直滚动
  3. SAE下修改models里面字段
  4. 1073 Scientific Notation (20 分)【难度: 一般 / 知识点: 字符串 模拟】
  5. 在Windows上使用putty连接一台Linux主机
  6. ASP.NETCore小技巧:使用测试用户中间件
  7. 扒一扒.NET Core的环境配置提供程序
  8. MinIO部署快速入门
  9. 从零学ELK系列(七):Centos安装Filebeat(超详细图文教程)
  10. [PyTorch] 卷积函数 and 解卷积函数
  11. echarts双柱_R+Echarts画双坐标轴折柱混合图
  12. (计算机组成原理)第三章存储系统-第六节2:页式/段式虚拟存储器
  13. win7笔记本设置WiFi热点详解
  14. pug安装与使用教程
  15. [转]不管你学的是什么专业,你都应该多少懂些管理学的东西
  16. Windows 硬盘安装 Ubuntu 教程
  17. 近期edge、谷歌浏览器崩溃的问题解决方案
  18. GAMES104 笔记 -引擎架构分层和整体pipeline
  19. 解决 npm install 时出现的.git can‘t be found (see https://git.io/Jc3F9)的问题 run `npm fund` for details问题解决
  20. c语言 x*,关于c语言%#X意思大全

热门文章

  1. 微信和QQ都能正常上网,但网页不能上网的3种解决办法。
  2. Altium designer PCB走线包地处理 教程
  3. Mocha Pro:Track 模块
  4. 网易闪电邮明文密码还原
  5. 监控数据从哪来?(入门篇)
  6. Excel如何将数据复制到合并单元格中
  7. 馆客多羽毛球馆管理系统-羽毛球场会员管理软件
  8. Java实现HTTPS加密、解密过程
  9. [日语]基于1006个小学生用字的音读到汉字的映射表
  10. 卷积神经网络在深度学习中新发展的5篇论文推荐