整數的分化問題:
對於乙個正整數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:
("輸入的引數有誤!"
) num = divinteger(n,n)
("%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,這樣還要分配空間來存放找到的因子,並且每次新增的...