我正在寻找一个整数分割的数量,总和为N,部分数量为S,最大部分恰好为X,而不需要枚举所有分割。
例如:100的所有分割中,有10个部分,最大部分为42。
我没有找到任何定理或分区身份证明来解决这个问题,并且我怀疑这是一个非平凡的问题,不能轻易地从已知的定理(例如Nijenhuis和Wilf 1978、Andrews等人2004、Bona 2006)中推导出来。
例如:具有S个部分的N的分区数等于具有S作为最大部分的N的分区数。
这个问题与我的研究相关,但它远离了纯数学。
更新:下面回答了这个问题,但我想发布我用来实现它的Python脚本。我可能会通过Cython将其加速。
例如:100的所有分割中,有10个部分,最大部分为42。
我没有找到任何定理或分区身份证明来解决这个问题,并且我怀疑这是一个非平凡的问题,不能轻易地从已知的定理(例如Nijenhuis和Wilf 1978、Andrews等人2004、Bona 2006)中推导出来。
例如:具有S个部分的N的分区数等于具有S作为最大部分的N的分区数。
这个问题与我的研究相关,但它远离了纯数学。
更新:下面回答了这个问题,但我想发布我用来实现它的Python脚本。我可能会通过Cython将其加速。
n = 100 # the total
s = 10 # number of parts
x = 20 # largest part
print Partitions(n,length=s,max_part=x).cardinality() # Sage is very slow at this
def parts_nsx(n,s,x):
if n==0 and s==0:return 1
if n<=0 or s<=0 or x<=0:return 0
if n>0 and s>0 and x>0:
_sum = 0
for i in range(0,s+1):
_sum += parts_nsx(n-i*x, s-i, x-1)
return _sum
print parts_nsx(n,s,x)