求乙個數的整數分化問題(python)實現

2021-10-10 03:32:57 字數 1209 閱讀 6217

整數的分化問題:

對於乙個正整數n的分劃,就是把n表示成一系列正整數之和的表示式。分劃與順序無關,例如6=5+1和6=1+5被認為是同一種分劃。另外,這個正整數自身也算是一種分化。

例:對正整數n=6的分劃:

65+1

4+2 4+1+1

3+3 3+2+1 3+1+1+1

2+2+2 2+2+1+1 2+1+1+1+1

1+1+1+1+1+1

求:對於正整數n,計算其分劃的數目p(n)

模型建立:

找出建立遞迴分劃數目的公式

根據n=6的例項可以發現:第一行及後面的資料都不超過6,第二行及以後的資料都不超過5,……,第六行的資料不超過1。因此定義函式q(n,m),表示整數n的「任何加數都不超過m」的分劃的數目,n的所有分劃數目p(n)就應該表示q(n,n)。

q(n,m)有以下遞迴關係:

1、 q(n.n) = 1 + q(n,n-1) '1』表示n之包含乙個被加數等於n本身的分劃,其餘的分劃表示n的所有其他分劃,即最大加數m<=n-1的分劃

2、q(n,m) = q(n,m-1) + q(n-m,m) (mdef

divinteger

(n,m)

:if n ==

1or m ==1:

return

1elif n < m:

return divinteger(n,n)

elif n == m:

return

1+ divinteger(n,n-1)

else

:return divinteger(n,m-1)

+ divinteger(n-m,m)

defmain()

: n =

int(

input

("請輸入n的值:"))

if n <1:

print

("輸入的引數有誤!"

) num = divinteger(n,n)

print

("%d 的分劃數為:%d"

%(n,num)

)if __name__ ==

'__main__'

: main(

)執行結果:

請輸入n的值:6

6 的分劃數為:11

求乙個數的整數次方

題目 求乙個數的整數次方。題目是如此的簡單,但是需要考慮的還是比較多 1.指數為負,底數是零 2.指數底數都是零 3.返回正常零和返回錯誤零的區別 4.底數為正,指數為負如何處理 5.考慮底數次方大的話,想效率問題 6.處理double數值相等問題 以下直接是 詳細考慮除底數指數全零的以上所有情況!...

求乙個數約數的個數

求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...

求乙個正整數的因子個數

如 整數 15,有1,15,3,5 共4個因子。要求演算法的複雜度為o sqrt n 首先想到的方法是 逐個列舉,從 1 到 n 2 1 當然也可以是 從 1 到 n 這樣演算法的複雜到至少是o n 的,而且,其中還要去重,比如 24 4 6 6 4,這樣還要分配空間來存放找到的因子,並且每次新增的...