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:}
页: 1 2 [3] 4
查看完整版本: Python:每日一题 324