一個找到序列方法是有兩個起點:N和M,其中N是我們試圖達到多少並且m從1開始。
接下來,我們將m加1,將它加到序列中並減少N.通過將N減小m並在N < = m * 2時停止達到解。
例如,如果我們試圖達到的數量爲3
N = 3
然後,
s={} # array to store pairwise distinct positive integers
k = 3 # k = N at the beginning
m = 1 # always starts at 1
m*2 = 2
因爲
k is not <= m*2
我們米添加到陣列,從01減去m k,add to m並再次重複相同的過程。
s = {1}
k = k - m = 3 - 1 = 2
m = 1 + m = 1 + 1 = 2
現在,
m*2 = 4
因爲
k <= m*2
我們增加ķ我們的陣列,我們正在做。
s = {1, 2}
這是python中的代碼,它做同樣的事情。
def optimal_summands(n):
summands = [] # array to store pairwise distinct positive integers
k = n # marked the upper part
m = 1 # marked the lower part
if n == 2 or n == 1:
summands.append(n)
else:
for i in range(1,k):
if k <= 2*m:
summands.append(k)
break
else:
summands.append(m)
k = k - m
m = m + 1
return summands
謝謝,我也需要讓它快速。是否有任何方法來減少它的運行時間。 –
(n-i) Captain