整數的分割:
4 = 4 p(4, 1) =1
= 1 3。2 2 p(4,2) = 2
= 1 1 2 p(4,3) = 1
= 1 1 1 1 P(4, 4) = 1
/max(p(4, k)) = 2, at k = 2
5 = 5 P(5, 1) =1
= 1 4。2 3 p(5,2) = 2
= 1 1 3。1 2 2 p(5,3) = 2
= 1 1 2 p(5, 4) = 1
= 1 1 1 1 p(5, 5) = 1
/max(p(5, k)) = 2, 在k = 2和3時
而p(n) = Σp(n, k) for ?k: 0<k<=n
p(4)=p(4,1) p(4,2) p(4,3) p(4,4)=1 2 1 1=5
p(5)=p(5,1) p(5,2) p(5,3) p(5,4) p(5,5)=1 2 2 1 1=7為此,我使用了歐拉特性 p(n, k) = p(n-1, k-1) p(n-k, k)
#p(n, k) = p(n-1, k-1) p(n-k, k)/span>
N = int(input()
p = [[0]*(N 1) for i in range(N 1)]
for i in range(N 1)。
p[i][1] =1
p[i][i] = 1
for n in range(2, N 1)。
for k in range(2, n 1)。
p[n][k] = p[n-1][k-1] p[n-k][k)
print(sum(p[-1] )
for x in p:
print(x[1:] )
print(sum(x))
使用上述代碼,我可以找到整數的磁區。p(N)即一個給定的數字n可以被表示為所有正整數的總和的總數。
但是,現在我想找到k的值,對于這個值,p(n,k)是最大的。
但是在python中沒有使用Euler's Identity。
uj5u.com熱心網友回復:
對于相當小的n值,你可以隱式地生成所有的磁區,計算每個磁區的零件數量。
n = 7。
kcounts = [0]*n
def parts(sum, last = 1, k=0)。)
if sum == 0:
global kcounts
kcounts[k-1] = 1
return return
for i in range(last, sum 1) 。
parts(sum - i, i, k 1)
部分(n)
print(kcounts)
>>。 [1, 3, 4, 3, 2, 1, 1]
因此,k=3給出了最大的磁區
uj5u.com熱心網友回復:
做如下處理:
N = int(input()
p = [[0]*(N 1) for i in range(N 1)]
最大 = 0]
k_number = 0 ]
ans = []
for i in range(N 1)。
p[i][1] =1
p[i][i] = 1
for n in range(2, N 1)。
k_number, maximum = 0, 0.
for k in range(2, n 1)。
p[n][k] = p[n-1][k-1] p[n-k][k)
if p[n][k] > maximum :
最大 = p[n][k]
k_number = k
n_for_max = n
ans.append([n, k_number, maximum])
print(sum(p[-1] )
for x in p:
print(sum(x))
for x in ans:
print(x)
#print('k_number: ',k_number)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331077.html
標籤:
