wayne 发表于 2025-3-19 18:33:27

mathe 发表于 2025-3-19 17:21
和为S时,我们需要查看\(c_n^2 S^{n(n+1)}\)什么时候达到最大,我们只需要查看\(\frac{c_{n+1}^2 S^{(n+1)( ...

好像是这个表达式$\frac{n^{n (n+1)} S^{2 n+2}}{(n+1)^{n+1} (n+2)^{n (n+2)}}\leq 1$ . 这个时候取对数,就是求根$(2 n+2) \log (S)-((n+1) \log (n+1))-(n+2) n \log (n+2)+n (n+1) \log (n)=0$,然后对结果 向上取整。
有意思的是,我那个是求导后的表达式,求根后取圆整。表达式不同,但是数据都一致。

yuange1975 发表于 2025-3-19 18:47:58

本帖最后由 northwolves 于 2025-3-19 22:34 编辑

这个结果没想到还挺好的。

大家可以继续研究研究那个方程的根的性质。

python代码



#数拆分成非负数之和,两两差值乘积最大
#0<=a0<a1<a2<a3…<an
#∑ai=S
#求s=∏(aj-ai) (j>i)的最大值?
#yuange 2025.3.19

from sympy import *
from mathimport *
from mpmath import *

mp.dps=40
mpf1=mpf(1.0)

x= symbols('x')

def fx(n,ss):
    f=0
    for i in range(0,n+1):
      f=f+(-1)**i*ss**i*comb(n+1,i)*comb(n,i)*factorial(i)*(n**2+n)**(n-i)*x**(n+1-i)
    f=f/factor_list(f)
    return f
   
def fcm(n,S):
    f=fx(n,S)
    print("f(x)=",factor(f),"=0")
    xn=solve(f*1.0)
    print("xn=",xn)
    L=len(xn)
    s=1
    for i in range(0,L):
       for j in range(i+1,L):
          s=s*abs(xn-xn)
   
    print("ok! s=",s)

def H(n):
    s=1
    for i in range(1,n+1):
      s=s*i**i
    return s
def fns(n,S):
    L=n*(n+1)
    l=L/2
    s=mpf1*H(n)
    s=s*(mpf1*S/L)**l
    s=s*(mpf1*(n+1))**((n+1)/2)
    return s
n=8
S=20
fcm(n,S)
print("fns=",fns(n,S))

S=2025
n=747
print("fns=",fns(n,S))
n=748
print("fns=",fns(n,S))
n=749
print("fns=",fns(n,S))

mathe 发表于 2025-3-19 19:50:38

wayne 发表于 2025-3-19 18:33
好像是这个表达式$\frac{n^{n (n+1)} S^{2 n+2}}{(n+1)^{n+1} (n+2)^{n (n+2)}}\leq 1$ . 这个时候取对数 ...

那可以写成\(S\le \sqrt{(n+1)(n+2)^{\frac n{n+1}}}(1+\frac 2 n)^{\frac n2}\)

yuange1975 发表于 2025-3-19 21:35:26

本帖最后由 yuange1975 于 2025-3-19 21:41 编辑

对于每个n求根直接用方程:
HypergeometricU[-n, 2, x]=0,
不管形式还是最终方程表达式,显得更简洁。
方程系数都直接是不可约的整数,首项系数为1,第二项-n(n+1)。

每个根的比例保持不变,实际结果每个根乘以S/(n(n+1))就可以了,所以根的性质也保持。




wayne 发表于 2025-3-20 08:06:38

yuange1975 发表于 2025-3-19 18:47
这个结果没想到还挺好的。

大家可以继续研究研究那个方程的根的性质。

啥意思,不是已经有结论了吗,就是一元2025次多项式的求根,只是没人贴答案而已。
0.0018116944393142642
0.0060733549625997555
0.012771410200491174
0.021905346342780813
0.03347507746790526
0.04748058447329943
0.06392186611723125
0.08279892804111412
0.10411177949499133
0.12786043215777707
0.15404489965045004
0.18266519731345024
..............................(可以给出全部根的任意精度,限于阅读体验,特此省略)
7596.175157783348
7620.7954326251465
7646.101676894295
7672.1719761457025
7699.101615483928
7727.009074760203
7756.045064353445
7786.406755742824
7818.361456426355
7852.288871426354
7888.76399654959
7928.742935004312
7974.075501032858
8029.586621339711

mathe 发表于 2025-3-20 10:05:35

根据https://mathworld.wolfram.com/PolynomialDiscriminant.html的说明,可以转化为f和f'之间的Resultant计算, 而这个最终可以转化为SylvesterMatrix的行列式计算。
也就是在本题中,结果变化为
\((-1)^{\frac{n(n+1)}2}\left|\begin{matrix}a_0&a_1&\cdots&a_n&0&0&\cdots&0&0\\
0&a_0&\cdots&a_{n-1}&a_n&0&\cdots&0&0\\
\vdots&\vdots&\ddots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots\\
0&0&\cdots&a_1&a_2&a_3&\cdots&a_n&0\\
(n+1)a_0&na_1&\cdots&a_n&0&0&\cdots&0&0\\
0&(n+1)a_0&\cdots&2a_{n-1}&a_n&0&\cdots&0&0\\
\vdots&\vdots&\ddots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots\\
0&0&\cdots&(n+1)a_0&na_1&(n-1)a_2&\cdots&2a_{n-1}&a_n
\end{matrix}\right|\)

yuange1975 发表于 2025-3-20 12:37:47

wayne 发表于 2025-3-20 08:06
啥意思,不是已经有结论了吗,就是一元2025次多项式的求根,只是没人贴答案而已。
...

显然不是要求某一个方程的根呀,是说研究这类方程的根有哪些性质。

wayne 发表于 2025-3-20 15:23:46

还有,我们通常情况下比较反感 贴出低质量的截图,占据论坛的空间。 这让人感觉 很随意,不礼貌。 虽然 咱们论坛的管理很宽松,不会明确警告这种行为,但是这样 势必会影响 交流体验,参与讨论的兴致的。

hujunhua 发表于 2025-3-21 01:53:26

northwolves 发表于 2025-3-17 23:25
规律还是很明显的:
1、若m=(n+(n-1)+...+3+2+1), n≥9, 则 MaxPartition(m)={n,n-1, ..., 3, 2, 1}.
2、若m=1+(n+(n-1)+...+3+2+1), 则MaxPartition(m)={n+1,n-1, ..., 3, 2, 1}.
3、若m=k+(n+(n-1)+...+3+2+1), k<n+1, 则MaxPartition(m)=MaxPartition(k)+{n, n-1, ..., 3, 2, 1}. 表左对齐相加。
      第3条在 k 远离三角数时一般成立,接近三角数时有例外,补差表要基于MaxPartition(k)进行微调。...
不扯皮了,一点小误会,不至于影响论坛友谊。
但是3#~5#的小误会值得探讨一下。就是限于整数范围时,4#所探寻的规律\[
\text{MaxPartition}(C_{n+1}^2+r)=\text{Range}(n)+\text{MaxPartition}(r)\\
(0≤r≤n, 9≤n)
\]其中`\text{Range}(n)=(n,n-1,...,3,2,1)`,按4#的格式,MaxPartition()按降序排列,表左对齐按位相加。
4#说这个公式对于 r 远离三角数时一般成立,接近三角数时需要微调。

由于n≥9时` \text{MaxPartition}(C_{n+1}^2)=\text{Range}(n)`, 所以上述公式可以写成一种加法定理:
【加法定理】设m=t+r, 其中 t 是不大于 m 的最大三角数,那么\[
\text{MaxPartition}(t+r)=\text{MaxPartition}(t)+\text{MaxPartition}(r)\]可以计算更多的数据,将这个加法定理的成立范围和调整方向搞得更仔细。

mathe 发表于 2025-3-21 07:13:09

浮点情况只有一个极值点,这个使得我们猜测限定非负整数情况的解和浮点情况差别不会太远。而northwolves给出的结果说明浮点靠近0附近的数据会比较密集,这导致整数情况这部分只能用较少的数字,这导致正常情况整数形式会使用较少的数,比如和为20时,浮点最值使用9个数(n=8),而northwolves给出的结果是n=6.

技术不相关内容我删除了,就此为止吧
页: 1 2 [3] 4 5 6
查看完整版本: 悬赏挑战:求2025的两两之差乘积最大的堆磊数组