鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 324

[复制链接]
发表于 2020-2-6 01:15:26 | 显示全部楼层
TJBEST 发表于 2020-2-5 22:38
不知道大家需要证明吗?我可以给出非常严谨的证明的,不知到大家需要吗?前面的朋友们只是从函数角度证明, ...

我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接近3,所以是比拆分3,请问大佬有什么好的证明方法吗?我也想看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 01:33:01 | 显示全部楼层
  1. def f324(n):
  2.     if n<4:return n-1
  3.     k,v=n%3,n//3
  4.     if k==0:return 3**v
  5.     elif k==1:return 3**(v-1)*4
  6.     else:return 3**v*2
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 01:38:23 From FishC Mobile | 显示全部楼层
本帖最后由 William4869 于 2020-2-6 01:45 编辑
fan1993423 发表于 2020-2-6 01:15
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接 ...


4以下暂不考虑,
从5开始,很显然不管是拆一个2出来还是拆一个3出来,乘积都会比原来的数大,
(x-3)*3=3x-9>(x-2)*2=2x-4>x
上面的不等式在x>=5时恒成立,所以整数x想乘积最大,没有理由拆出超过4的数,而拆一个4也就相当于拆2个2,
所以现在要考虑的显然就是到底是拆2还是拆3划算,
而两个3要优于3个2
设可以拆有M个3,N个2
当N>3时,每3个2改成2个3
这样就只剩
M个3,1个或2个2了吧


这样证明算严谨吗

导数得出e应该没什么问题,但那也只是能被e整除全拆e比较好吧
以6为例e*e*(6-2e),和e*(6-e),反而没有3*3来的大了


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 10:51:05 | 显示全部楼层
fan1993423 发表于 2020-2-6 01:15
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接 ...

下午证明吧,这题我高中做过,我用比较严谨的数论做。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 11:45:13 | 显示全部楼层
William4869 发表于 2020-2-6 01:38
4以下暂不考虑,
从5开始,很显然不管是拆一个2出来还是拆一个3出来,乘积都会比原来的数大,
(x-3)* ...

对啊,因为这道题要求的拆分为整数,如果不是要求是整数的话,10应该拆分成3个e和10-3e,相乘得37点多。比分成3,3,4的36更大。但是我觉得应该有个划分点,小于某个数可能e还不是很适合。有兴趣的可以在做一下如果不限制划分为整数,求最大值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 12:13:35 | 显示全部楼层
fan1993423 发表于 2020-2-6 11:45
对啊,因为这道题要求的拆分为整数,如果不是要求是整数的话,10应该拆分成3个e和10-3e,相乘得37点多。比 ...

如果划分成n个数,不要求整数的话,,感觉跟e有点关系,像你说的靠近e关系,,但不应该是要划分多少个e出来

就说10,
分成4个2.5,相乘39+,,比你说的3个e要大
拿13来说
我感觉分成5个2.6才是最佳选择

我也不知道会不会这样的关系,只是猜测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 12:30:11 | 显示全部楼层
William4869 发表于 2020-2-6 12:13
如果划分成n个数,不要求整数的话,,感觉跟e有点关系,像你说的靠近e关系,,但不应该是要划分多少个e出 ...

好像是哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 12:56:47 | 显示全部楼层
  1. class Solution:
  2.     def integerBreak(self, n: int) -> int:
  3.         if n > 3:
  4.             m, k  = divmod(n, 3)
  5.             if k == 2:
  6.                 return 3 ** m * 2
  7.             if k == 1:
  8.                 return 3 ** (m - 1) * 4
  9.             if k == 0:
  10.                 return 3 ** m
  11.         return n - 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 14:31:41 | 显示全部楼层
正整数指的是 大于0 的整数呦。
所以1是无法得出至少两个的 正整数 之和的。
  1. def solve(n:'int > 0')->int:
  2.     if n < 2:
  3.         return -1  # 0 不是正整数!
  4.     #1 无法分为至少 2 个正整数之和。
  5.     #大于等于0的整数集合名字叫做自然数集。
  6.     elif n <= 3:
  7.         return n-1
  8.     else:
  9.         num = divmod(n,3)
  10.         res = 3**num[0]
  11.         return int((res+res/3) if num[1] == 1 else res * num[1] if num[1] else res)
  12. if __name__ == '__main__':
  13.     print('示例1 输出:',solve(2))
  14.     print('示例2 输出:',solve(10))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 17:24:11 | 显示全部楼层
本帖最后由 TJBEST 于 2020-2-6 17:26 编辑

关于此题的数学证明,大家看看,忽略水印,原本想用word上传但是点击图标w粘贴后上传失败,估计是因为有公式吧
324数学分析.png

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
zltzlt + 3 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2020-2-6 17:29:29 | 显示全部楼层
fan1993423 发表于 2020-2-6 01:15
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接 ...

我写完证明了,可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 17:30:34 | 显示全部楼层
William4869 发表于 2020-2-6 01:38
4以下暂不考虑,
从5开始,很显然不管是拆一个2出来还是拆一个3出来,乘积都会比原来的数大,
(x-3)* ...

我用数论证明了,你可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-6 18:36:20 | 显示全部楼层
我不会、、、

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
zltzlt -1 -1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-6 18:40:11 | 显示全部楼层

不会也别来灌水呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 16:32:22 | 显示全部楼层
本帖最后由 坑得飞起 于 2020-2-12 16:38 编辑

def func324(n) :
    res=[i for i in range(n+1)]
    for i in range(1,n+1):
        for j in range(1,i):
            res = max(res,res[i-j]*res[j])
    if n < 4 :
        return n-1
    return res[n]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 20:34:34 | 显示全部楼层
这就是个有关均值不等式的导数问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 20:55:34 | 显示全部楼层
a = a1 + a2 +a3 +.......+an
a/n=(a1+a2+a3+...+an)/n>=(a1a2a3...an)^(1/n)
即a1a2a3...an<=(a/n)^n
下求(a/n)^n的最大值
f(n)=(a/n)^n
f(n)的导数g(n)=((ln(a/n)-1)a^n)/n^n
g(n)=0
解得n=a/e,e为自然对数的底数
由于n是正整数
所以取不到最大值
n越接近a/e
(a/n)^n的值越大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-13 16:10:15 | 显示全部楼层
  1. def fun324(x):
  2.     if x in [2,3,4]:
  3.         return [1,2,4][[2,3,4].index(x)]
  4.     if x%3 == 2:
  5.         return 3**(x//3)*2
  6.     if x%3 == 1:
  7.         return 3**((x//3)-1)*4
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 07:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表