fan1993423
发表于 2020-2-6 01:15:26
TJBEST 发表于 2020-2-5 22:38
不知道大家需要证明吗?我可以给出非常严谨的证明的,不知到大家需要吗?前面的朋友们只是从函数角度证明, ...
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接近3,所以是比拆分3,请问大佬有什么好的证明方法吗?我也想看一下
kinkon
发表于 2020-2-6 01:33:01
def f324(n):
if n<4:return n-1
k,v=n%3,n//3
if k==0:return 3**v
elif k==1:return 3**(v-1)*4
else:return 3**v*2
William4869
发表于 2020-2-6 01:38:23
本帖最后由 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来的大了{:10_245:}
TJBEST
发表于 2020-2-6 10:51:05
fan1993423 发表于 2020-2-6 01:15
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接 ...
下午证明吧,这题我高中做过,我用比较严谨的数论做。
fan1993423
发表于 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还不是很适合。有兴趣的可以在做一下如果不限制划分为整数,求最大值
William4869
发表于 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才是最佳选择
我也不知道会不会这样的关系,只是猜测
fan1993423
发表于 2020-2-6 12:30:11
William4869 发表于 2020-2-6 12:13
如果划分成n个数,不要求整数的话,,感觉跟e有点关系,像你说的靠近e关系,,但不应该是要划分多少个e出 ...
好像是哈
冬雪雪冬
发表于 2020-2-6 12:56:47
class Solution:
def integerBreak(self, n: int) -> int:
if n > 3:
m, k= divmod(n, 3)
if k == 2:
return 3 ** m * 2
if k == 1:
return 3 ** (m - 1) * 4
if k == 0:
return 3 ** m
return n - 1
阴阳神万物主
发表于 2020-2-6 14:31:41
正整数指的是 大于0 的整数呦。
所以1是无法得出至少两个的 正整数 之和的。
def solve(n:'int > 0')->int:
if n < 2:
return -1# 0 不是正整数!
#1 无法分为至少 2 个正整数之和。
#大于等于0的整数集合名字叫做自然数集。
elif n <= 3:
return n-1
else:
num = divmod(n,3)
res = 3**num
return int((res+res/3) if num == 1 else res * num if num else res)
if __name__ == '__main__':
print('示例1 输出:',solve(2))
print('示例2 输出:',solve(10))
TJBEST
发表于 2020-2-6 17:24:11
本帖最后由 TJBEST 于 2020-2-6 17:26 编辑
关于此题的数学证明,大家看看,忽略水印,原本想用word上传但是点击图标w粘贴后上传失败,估计是因为有公式吧
TJBEST
发表于 2020-2-6 17:29:29
fan1993423 发表于 2020-2-6 01:15
我个人觉得从函数导数思维好理解,一阶导数为0,二阶导数小于0,就可以说明在这个点是极大值了。确实e接 ...
我写完证明了,可以看看
TJBEST
发表于 2020-2-6 17:30:34
William4869 发表于 2020-2-6 01:38
4以下暂不考虑,
从5开始,很显然不管是拆一个2出来还是拆一个3出来,乘积都会比原来的数大,
(x-3)* ...
我用数论证明了,你可以看看
Jessy111
发表于 2020-2-6 18:36:20
我不会、、、
zltzlt
发表于 2020-2-6 18:40:11
Jessy111 发表于 2020-2-6 18:36
我不会、、、
不会也别来灌水呀
坑得飞起
发表于 2020-2-12 16:32:22
本帖最后由 坑得飞起 于 2020-2-12 16:38 编辑
def func324(n) :
res=
for i in range(1,n+1):
for j in range(1,i):
res = max(res,res*res)
if n < 4 :
return n-1
return res
有理由相信
发表于 2020-2-14 20:34:34
这就是个有关均值不等式的导数问题
有理由相信
发表于 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的值越大
776667
发表于 2020-10-13 16:10:15
def fun324(x):
if x in :
return [.index(x)]
if x%3 == 2:
return 3**(x//3)*2
if x%3 == 1:
return 3**((x//3)-1)*4