把正整数n表示成若干个正整数的和,求积的最大值
来源:互联网 发布:java程序员接私活 编辑:程序博客网 时间:2024/05/16 11:31
题目:把正整数n表示成若干个正整数的和,求积的最大值
例如:当n=4时,有4种拆分方法
4=4
4=1+3,1*3=3
4=2+2,2*2=4
4=1+1+2,1*1*2=2
所以积的最大值为4
名词定义:
n的最大分解:满足积最大的分解,比如4的最大分解为4=2*2,最大分解可能不唯一,例如4的最大分解有2种
求解的准备工作:
定理一:如果n>1,那么n的最大分解中,1是不可能出现的
证明:如果n>1且最大分解中出现了1,那么至少还会出现一个整数m,
用m+1替换m和1,那么积会变大,与最大分解的定义矛盾!
定理二:n的最大分解中不可能出现大于4的数
证明:如果最大分解中出现了大于4的数,假设为m
用m-2和2替换m,那么(m-2)*2=m+m-4>m,即积变大,与最大分解的定义矛盾!
定理三:n的所有最大分解中,一定有一种是没有出现4的
证明:假设出现了4,用2和2替换4,积不变
对所有的4都进行这样的变换,乘积仍然不变。
例如将15=4+4+4+3替换成15=2+2+2+2+2+2+3,乘积4*4*4*3=2*2*2*2*2*2*3=192
这样,一定有一种最大分解是没有出现4的
定理四:如果n>1,那么一定有一个最大分解,可以表示成n2个2和n3个3,即n=n2*2+n3*3,其中n2=0或1或2,n3是非负整数
证明:根据定理一、定理二、定理三,一定有一个最大分解,只由若干个2和若干个3组成(若干个可能是0个)
假设最大分解表示成n2个2和n3个3,如果n2>2,那么至少有3个2
用3,3替换2,2,2,乘积变大,与最大分解的定义矛盾!
所以n2=0或1或2,n3是非负整数
问题的求解:
如果n=1,不需要再分解
如果n>1,根据定理四,可以表示成n=n2*2+n3*3
那么n%3的值可以表示成n%3=(n2*2+n3*3)%3=(n2*2)%3
所以n2=(3-n%3)%3
所以,当n%3=0时,n2=0,当n%3=1时,n2=2,当n%3=2时,n2=1
所以,n的一个最大分解是n2个2和(n-n2*2)/3个3,其中n2=(3-n%3)%3
另解:
如果n=1,不需要再分解
如果n>1,n的一个最大分解是1个k和(n-k)/3个3,其中k=(n-2)%3+2
类似的题目:把正整数n表示成若干个不同的正整数的和,求积的最大值
- 把正整数n表示成若干个不同的正整数的和,求积的最大值
- 把正整数n表示成若干个正整数的和,求积的最大值
- POJ - 1032 Parliament( 把正整数n表示成若干个不同的正整数的和,求积的最大值)
- NYOJ 90 —— 求正整数n划分为若干个正整数的划分个数
- 把自然数N分解成若干个互不相同的正整数,使乘积最大
- 一个正整数n被分成若干个不同自然数的和,求组成n的一组自然数的最大乘积
- 将一个正整数n表示成一系列的正整数之和,求共有几种划分方法
- 判断整数 x 能否表示成 n(n >= 2)个连续正整数的和
- 求N个正整数的最大公约数和最小公倍数
- 求四个正整数的最大值
- 把正整数 n 转化成最少个数字的平方
- 如何判断一个整数x是否可以表示成n个连续正整数的和
- 列出一个正整数表示成n(n>=2)个连续正整数之和的所有形式
- 求正整数N的平方根
- 判断一个整数x是否可以表示成n(n>=2)个连续正整数的和
- [算法]将一个正整数拆分成若干个正整数的和,输出所有的结果不重复
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
- 求正整数A和正整数B的二进制表示中有多少位是不同的
- oracle数据库启动的三个阶段
- python commands模块在python3.x被subprocess取代
- Diffie-Hellman密钥交换
- LeetCode刷题系列_15题
- Heritrix开源爬虫配置1.14.4和3.1
- 把正整数n表示成若干个正整数的和,求积的最大值
- Rich featureHierarchies for accurate object detection and semantic segmentation 阅读笔记
- mysql 开启慢查询 清空slow_log日志或者slow_log表
- C/C++ 线程同步测试例子
- iOS基本控件基于点语法实现,写法简单由你定义
- 学习笔记之python入门
- 6.0动态申请权限问题
- ios 10 部分App无法连接网络或网络错误
- UNIX网络编程笔记二