自然数分解求最大乘积
题目:
把正整数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⩾a1a2 (na1+a2+⋯+an)⩾na1a2⋯an , 即 (ns)n⩾a1a2⋯an
- a1>1
- 1<=ai+1-ai<=2,因为如果出现>2,可以将ai+1、ai改为ai+1-1、ai+1,使得到的乘积更大
- 最多只有一个i,使得ai+1-ai=2 ⬅为了让拆的数尽量多。。这里感觉不太严谨,跟数学建模出了个策略似的((谁来告诉我怎么证QAQ
总结策略如下:
把数按自然数顺序拆成2, 3, 4…an, an+1, an+1里是拆剩下的数。当an+1<=an时不合题意,要把它拆了分给前边的数。
- an+1=an时,因为an及之后的数每数加1还剩个1,只能把这个1分给an
- 1<an+1<an时,从an起向a1走,每个数挨个加1
- 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)
自然数分解求最大乘积相关推荐
- [01] 动态规划-自然数分割求最大乘积
@动态规划-之自然数分割求最大乘积 问题描述 给定长度为n的木棍,请把它锯称m段,(m,n都是整数,n > 1, m > 1).每段木棍的长度记为k[1].k[2].--.k[m].求k[ ...
- 自然数分解:任何一个自然数m的立方均可写成m个连续奇数之和。编程实现:输入一自然数 n,求组成 n3的 n个连续奇数。
标题 自然数分解 类别 流程控制 时间限制 2S 内存限制 1000Kb 问题描述 任何一个自然数m的立方均可写成m个连续奇数之和.例如: 13=1 23=3+5 33=7+9+11 43=13+15 ...
- LU分解法c语言程序设计,矩陣LU分解求逆详细分析与C语言实现.doc
矩陣LU分解求逆详细分析与C语言实现 题目要求 给定一个多维矩阵,实现该矩阵的求逆运算. 1.理论分析 矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将一个n阶矩阵A分解为一个下三角矩阵L和 ...
- 11091 最优自然数分解问题
问题描述: 设n是一个正整数. (1)现在将n分解为若干个互不相同的自然数之和,且使这些自然数的乘积最大. (2)现在将n分解为若干个自然数之和,且使这些自然数的乘积最大. 编程任务:对于给定的正整数 ...
- LU分解求线性方程组的解
LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...
- c语言10 u0010求余怎么求,矩阵LU分解求逆详细分析与C语言实现.docx
题目要求 给定一个多维矩阵,实现该矩阵的求逆运算. 1.理论分析 矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将 一个n阶矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积.所 以首先对 ...
- 计算方法LU分解c语言程序解线性方程组,LU分解求线性方程组的解
LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...
- 1到1亿的自然数,求所有数的拆分后的数字之和
1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2.8.6,如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1 /*** 1到1亿的自然数,求 ...
- 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法
C语言实现数值分析中带双步位移的QR分解求特征值算法. 数 值 分 析(B) 大 作 业(二) 1.算法设计: ①矩阵的拟上三角化: 对实矩阵A进行相似变换化为拟上三角矩阵A(n 1),其变换矩阵采用 ...
最新文章
- MongoDB探索之路(二)——系统设计之CRUD
- 封装,多态,类的约束,super()深入了解
- 激光点云格式转换 bin 相互 pcd转换
- 博士申请 | 香港中文大学(深圳)罗元教授招收计算机与信息工程全奖博士
- Java代码判断数据库中某张表是否存在
- 恶意软件盯上了加密货币,两家以色列公司受到攻击
- XidianOJ 1019 自然数的秘密
- [react] react中修改prop引发的生命周期有哪几个?
- java编程思想第四版第十四章 类型信息习题
- Visual Graph图形控件的高级应用
- 数据库表的建立与基本操作
- access 知乎 窗体_ACCESS数据可视化之路
- 数据分析——鸢尾花数据集
- Log4j2 漏洞检测工具清单
- linux .deb文件安装
- 王者荣耀android看不见iOS,王者荣耀转区功能来了!iOS和安卓这个限制,终于消失了...
- 任务16:16_Flume案例_断点续传文件(案例测试)
- 学习《图说设计模式》建造者模式
- LIN总线:主动进气栅格系统执行器(AGS/AGM)
- idea中JD-Intellij插件如何使用以及Luyten的使用