整数分解成不同加数的最大乘积
题库建设
题目
设n为一自然数,n可以分解成若干个不同的自然数的和,这样的分法有很多种,比如n=10, 10可以分解为:10=5+4+1; 10=5+3+2; 10+9+1; 10=8+2; 10=7+3; 10=6+4; 10=,7+2+1; 10=6+3+1;…。在所有这些分法中,各加数乘积最大的为30, (10=5+3+2中加数的乘积为5*3*2=30)。试编写程序,求各种分解方法中各加数乘积的最大值。
输入要求:输入只有1行,自然数n。
输出要求:输出也只有1行,所有分解方法中各加数乘积的最大值。
代码
发现一个规律:就是连续的整数乘积是最大的,比如12:
12 = 2+3+4+3=3+4+5=2+4+6
发现3*4*5最大
13 = 2+3+4+4 = 3+4+6最大
可以总结出:从2开始依次求出连续的加数因子,最后将剩下的数平均分到前面的因子里(如果有的话),比如9 = 2+3+4就不用分了,像13这种平均分完之后还剩了1,那肯定加在最大的数了。
#include <iostream>
#include <algorithm>
using namespace std;int main() {int n = 0;//待分解的数cin >> n;int factor[50] = { 0 };//存放因子的数组int i = 0;//从2开始分解出因子for (int j = 2; j <= n; j++) {factor[i++] = j;n -= j;}if (0 != n) {if (n == i + 1) {//即现在的n比因子数还多一个,不可能均匀分配,所以加在最后先factor[i - 1]++;n--;}for (int j = 0; j < n; j++) {//从后往前依次加1factor[i - j - 1]++;}}int max = 1;for (int j = 0; j < i; j++) {max *= factor[j];}cout << max << endl;return 0;
}
整数分解成不同加数的最大乘积相关推荐
- 整数n分解成素数乘积c语言,用C语言和汇编语言实现将1个整数分解成几个素数的乘积...
任何1个大于2的整数都可以分解成几个素数的乘积.将1个整数分解成几个素数的乘积是个热门话题. 经常有人问到.本文试图用C语言和32位X86汇编语言给出一个比较好的实现.希望对c语言学习者和 汇编语言学 ...
- 整数分解成若干项之和(DFS)拓展延伸
在深度优先搜索的例题中,有一种题型是整数分解成若干项之和. 例如将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=1+6,7=2+5,7=1+1+5,-.编程求出正整数N的所有整数分解式 ...
- 用C语言实现将1个整数n分解成几个素数的乘积
问题的提出:将一个整数分解素因数 根据算术基本定理,任何大于2的正整数都可以表示为素数的乘积,如果不考虑这些素数出现的次序,其 表示方式为唯一的.本题目的要求是输入一个正整数,将这个正整数显示为几个素 ...
- 分解 python_面试官:如何用Python实现将一个整数分解成质因数?
概述 今天主要分享一个关于分解质因数的实例,判断的逻辑稍微多了点,一起来看看吧~ 需求 将一个整数分解质因数.例如:输入90,打印出90=233*5 思路 其实根本不需要判断是否是质数,从2开始向数本 ...
- 不相交轮换的乘积怎么求_怎么样将一个轮换分解成不相交的轮换的乘积
展开全部 把轮换的32313133353236313431303231363533e58685e5aeb931333433633939乘积看成变换的乘积就行了,轮换本身就是变换,上式看成Ψ1Ψ2Ψ3, ...
- uint16 累加_如何把一个uint16整数分解成两个字节并传输?
以上来自于百度翻译 以下为原文 Yeah, the second is possibly less portable , but can do the job efficiently in this ...
- 近世代数--置换群--置换permutation分解成什么?置换的级如何计算?
近世代数--置换群--置换permutation分解成什么?置换的级如何计算? 置换的分解 置换的级计算 博主是初学近世代数(群环域),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如 ...
- 整数n分解成素数乘积c语言,关于几种求素数的方法(C语言描述)
求出3到50w范围内所有的素数. 这类问题在C语言题目中经常会遇见.同样,大素数的研究对于密码学也起到了重要的作用.那么对于C语言的初学者,该如何编写程序计算素数呢? 1. 首先从素数的定义来看,&q ...
- 将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大
#include<iostream> #include<cstdio> using namespace std; //把自然数N分解成若干个互不相同的正整数,使乘积最大: /* ...
最新文章
- 微信分享,二次分享(移动web端)
- redis VS kafka
- UR #3 核聚变反应强度( gcd )
- 2.1.5 编码与调制(1)
- 深入浅出设计模式_深入浅出设计模式03接口隔离原则
- 【BZOJ3630】[JLOI2014]镜面通道 几何+最小割
- xgboost 多gpu支持 编译
- createform用法_vue自定义表单生成器form-create使用详解
- 对于Algorand的介绍
- CVPR!你凭什么收录我3篇论文!? 1
- linux比较小数大小,带有小数点的数值对比大小
- 用css3和html实现创建 Christmas Tree Ornaments(baubles)
- 风控报表课程正式开启
- java简单单向链表_用java简单的实现单链表的基本操作
- python机器学习库sklearn——Lasso回归(L1正则化)
- js移动端 可移动滑块
- vue如何设置视频封面_vue怎么制作朋友圈封面视频
- 尔雅 2017大学计算机基础答案,2018超星尔雅大学计算机基础答案.docx
- Java soso移动大厅项目
- 如何在Python中使用Rest API