求划分因子乘积最大的一个划分及此乘积

求划分因子乘积最大的一个划分及此乘积
  问题简述:给定一个正整数n, 则在n所有的划分中, 求因子乘积最大的一个划分及此乘积。例如:8 = {8}, {7, 1}, {6, 2}, {5, 3}, {4, 4}, {3, 3, 2}, {2, 2, 2, 2} 等,那么在这些当中,3 * 3 * 2 的乘积最大,所以输出整个划分
和这个乘积 18。
  算法分析:这是我在某个论坛上看到的问题,以及别人针对此问题的数学分析,现简单的整理如下:
  (1)对于任意大于等于4的正整数m, 存在一个划分m = m1+m2, 使 m1m2 >= m证: 令m1 = int(m/2), 则 m1 >= 2 , m2 = m-m1; 那么m2 > 2,并且 m2 >= m/2 >= m1; m1m2 >= 2m2 >= m; 证毕;
该证明简单的来说就是:对于一个大于等于4的正整数m,存在一个2块划分的因子,这两个因子的乘积总是不小于原数m本身。
  (2)由(1)知此数最终可以分解为 2^r
3^s。现证明 r <= 2;
  证:若r > 2, 则至少有3个因子为2, 而222 < 33;
  所以可以将3个为2的因子,换为两个因子3;积更大;证毕。
  综合(1),(2),则有:任何大于4的因子都可以有更好的分解, 而4可以分解为2
2。
  所以:此数应该分解为 2^k1 * 3^k2。而且可以证明 k1>=0 并且 k1 <= 2,因此:
   A.当n = 3r 时, 分解为 3^r
   B.当n = 3
r+1时, 分解为 3^(r-1)22
  C.当n = 3r+2时, 分解为 3^r2
  剩下编程处理,那就是太简单了,首先是处理 <= 4的特殊情况,再对>4的情况进行模3的3种情况的判断,最后一一输出。可见,数学在整数划分问题上有太强的功能。谁叫这个问题叫整数划分呢,不与数学密切才怪! ^_^。

原文地址:https://www.cnblogs.com/Roni-i/p/9057892.html

时间: 2024-08-12 06:06:23

求划分因子乘积最大的一个划分及此乘积的相关文章

NYOJ 90 —— 求n划分为若干个正整数的划分个数

整数划分 时间限制:3000 ms  |  内存限制:65535 KB 描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个数. 例如正整数6有如下11种不同的划分: 6: 5+1: 4+2,4+1+1: 3+3,3+2+1,3+1+1+1: 2+2+2,2+2+1+1,2+1+1+1+1: 1+1+1+1+1+1.  输入 第一行是测试数据的数目M(1<=M<=10).以下每

上海学区划分2016年,上海学区房划分分布图

上海学区划分2016年,上海学区房划分分布图 学区划分2016年,学区房划分分布图详细信息如下: 学区房房价 学区房能带来什么好处不用说大家都知道.但是家长一定要注意的是,不是所有学校周边的房子都叫学区房,在购房时候,一定要看看所选房源是否在小学划片之内,否则投买了套“伪学区房”,那真是哭都哭不出来了. 学区划分2016年以下10个注意事项,真心给家长提醒了. 1.2016年上海市学区房空口无凭一切以合同为准 现在的楼盘大多数都是卖期房,尽管宣传资料上说是建有教育配套,置业顾问也讲得言之凿凿,但

LightOj 1278 - Sum of Consecutive Integers(求奇因子的个数)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1278 题意:给你一个数n(n<=10^14),然后问n能用几个连续的数表示; 例如: 15 = 7+8 = 4+5+6 = 1+2+3+4+5,所以15对应的答案是3,有三种; 我们现在相当于已知等差数列的和sum = n, 另首项为a1,共有m项,那么am = a1+m-1: sum = m*(a1+a1+m-1)/2  -----> a1 = sum/m - (m-1)/2 a

求圆圈中剩下的最后一个数字

n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后,从被删除数字的下一个继续删除第m个数字.求出在这个圆圈中剩下的最后一个数字. 这个问题在wiki上叫约瑟夫斯问题. 一开始的序列是 S(n): n-1, 0, 1, 2, 3, ...., n -2 (一个环) 删除了第k=(m-1)%n个数,之后变成 S': n-1, 0, 1,2,...,k-1,k+1,...,n-2 S(n-1)

POJ1845Sumdiv(求所有因子和 + 唯一分解定理)

Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17387   Accepted: 4374 Description Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 99

数据库筛选用户,然后去掉一部分(列表求差),再随机返回一个用户。sqlalchemy + python集合(set) + random

sqlalchemy和flask-sqlalchemy之间的东西不是太清晰. sqlalchemy文档太他妈多了,日. 今天遇到的实例. 用户进行随机匹配,系统随机返回一个一定筛选条件下的用户.为了用户体验,还得去掉已关注的人. 首先获取满足筛选条件的用户列表: users = User.query.filter_by(school=form.school.data, sex=form.sex.data, status=form.status.data).all() 且要获取已关注用户列表: f

c程序设计 8.12 用牛顿迭代法求根。方程为:ax^3+bx^2+cx+d=0 ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出.

//https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin#4 //百度牛顿迭代法 #include <stdio.h> #include <math.h> double solut(double a,double b,double c,double d) { double x1=1,x,f,f1; //迭代 do { x=x1; f=((a*x+b

偶然在博客中见对百度一个面试题的探讨,写些自己的看法以及指出探讨中不对的观点:百度面试题:求绝对值最小的数 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现 例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

今天申请了博客园账号,在下班后阅览博客时发现了一个关于百度面试题探讨的博客(其实是个很基础的问题),此博客url为:http://www.blogjava.net/nokiaguy/archive/2013/01/30/394920.html 其中下面有人评论为: 有序列表查找显然二分啊,博主貌似对java的arrays和collections不是很熟. private static int getMinAbsoluteValue(final int[] source) { int index

求最大连续序列和的一个巧妙方法,时间复杂度O(n)

1 # include<iostream> 2 using namespace std; 3 long long a[1000000]; 4 long long b[1000000]; //b[i]表示数列前i+1个数的最大连续序列和 5 int main(){ 6 long long n=0,i=0; 7 while(cin>>n){ 8 for(i=0;i<n;i++) 9 cin>>a[i]; 10 b[0]=a[0]; 11 long long ma=a[