wanting-for
发表于 2020-2-5 19:44:23
def solve(n):
if n <=3:
return n
else:
if n%3==0:
return pow(3,n//3)
elif n%3==1:
return pow(3,n//3-1)*4
else:
return pow(3,n//3)*2
print(solve(4))
我来解释一下,为什么要以三来分,
设这个数为n,分为 n/x 份,每个数字就是 x
那么这些数字的乘积之后求导的这张图片可以看到,当x越接近 e 的时候,这个乘积就是最大的
所以就去,2和3 来进行拆分。
其实10 分为 334 不准确,应该是,分为 3322
不过乘积都是一样的。。。。{:5_95:}
知其然更要知其所以然!
zltzlt
发表于 2020-2-5 20:13:45
wanting-for 发表于 2020-2-5 19:44
我来解释一下,为什么要以三来分,
设这个数为n,分为 n/x 份,每个数字就是 x
那么这些数字的乘积之后 ...
解答错误
输入:2
输出:2
预期结果:1
阴阳神万物主
发表于 2020-2-5 20:28:28
zltzlt 发表于 2020-2-5 17:24
1 = 0 + 1,0 × 1 = 0
0 可不是正整数啊!
wanting-for
发表于 2020-2-5 20:31:17
zltzlt 发表于 2020-2-5 20:13
解答错误
输入:2
def solve(n):
if n <=3:
if n == 2:
return 2
if n == 1:
return 0
return n
else:
if n%3==0:
return pow(3,n//3)
elif n%3==1:
return pow(3,n//3-1)*4
else:
return pow(3,n//3)*2
print(solve(1))
已修改
fan1993423
发表于 2020-2-5 20:39:49
wanting-for 发表于 2020-2-5 19:44
我来解释一下,为什么要以三来分,
设这个数为n,分为 n/x 份,每个数字就是 x
那么这些数字的乘积之后 ...
哦,我刚刚自己求导了一下,终于搞清楚了原理,如果不限制是整数的话,应该越多自然常数e越大
阴阳神万物主
发表于 2020-2-5 20:48:55
zltzlt 发表于 2020-2-5 18:53
15 = 3 + 3 + 3 + 3 + 3,3 * 3 * 3 * 3 * 3 = 243。
这是分解成4个啊?我怎么看都是 5 个耶。
wanting-for
发表于 2020-2-5 21:02:36
fan1993423 发表于 2020-2-5 20:39
哦,我刚刚自己求导了一下,终于搞清楚了原理,如果不限制是整数的话,应该越多自然常数e越大
编程还是跟数学分不开啊,可惜我的数学都忘了差不多了
阴阳神万物主
发表于 2020-2-5 21:08:21
话说,两个以上不是该 大于2 吗?
1+1 这种数量不是 等于2 了么?
ouyunfu
发表于 2020-2-5 21:30:34
def function324(n):
if n < 2:
return None
elif n == 2:
return 1
elif n == 3:
return 2
else:
a,b=divmod(n,3)
return *pow(3,a-1)
zltzlt
发表于 2020-2-5 21:58:47
阴阳神万物主 发表于 2020-2-5 21:08
话说,两个以上不是该 大于2 吗?
1+1 这种数量不是 等于2 了么?
漏了个 “及”。
小如芝麻的问题都能找出来~~{:10_275:}
zltzlt
发表于 2020-2-5 22:08:12
阴阳神万物主 发表于 2020-2-5 20:48
这是分解成4个啊?我怎么看都是 5 个耶。
{:10_277:}
546623863
发表于 2020-2-5 22:09:23
这题目换个说法不就是看谁拆3拆的多么
zltzlt
发表于 2020-2-5 22:10:06
546623863 发表于 2020-2-5 22:09
这题目换个说法不就是看谁拆3拆的多么
{:10_277:}{:10_250:}
546623863
发表于 2020-2-5 22:20:14
import math
def fun324(n):
if(n < 4):
return n-1
if(n%3 == 0):
return pow(3,n//3)
elif(n%3 == 1):
return pow(3,n//3-1)*4
elif(n%3 == 2):
return pow(3,n//3)*2
TJBEST
发表于 2020-2-5 22:33:19
这题是高中数论竞赛题,结论就是 越多的3 越大 因为 3x3=9 2x2x2=8 当和为6时两个3更大若含有因子 a大于4 则可以写作
3(a-3) = 3a - 9>a 所以因子不大于4 那么因子就是2,3,4唯一变数就是4 4分成2x2比 1x3大 所以 出现4的时候还是分成2个2更大
综上 如何分割?只分割成3和2 且 2的个数不大于2
def fun324(n):
if n >= 4:
res = n % 3
div = n // 3
if res == 1:
return (3 ** (div - 1)) * 4
elif res == 2:
return (3 ** div) * 2
else:
return 3 ** div
else:
return n - 1
_2_
发表于 2020-2-5 22:37:52
zltzlt 发表于 2020-2-5 22:10
难道要暴力尝试应该分成多少个数吗?
TJBEST
发表于 2020-2-5 22:38:06
不知道大家需要证明吗?我可以给出非常严谨的证明的,不知到大家需要吗?前面的朋友们只是从函数角度证明,只能说定性不算严格证明
shansongh
发表于 2020-2-5 23:54:04
本帖最后由 shansongh 于 2020-2-6 00:40 编辑
{:5_105:}
shansongh
发表于 2020-2-6 00:19:33
本帖最后由 shansongh 于 2020-2-6 00:40 编辑
{:5_107:}
shansongh
发表于 2020-2-6 00:33:02
本帖最后由 shansongh 于 2020-2-6 00:39 编辑
{:5_104:}