乙個整數總可以拆分為2的冪的和,求不同拆分的種數。

2021-09-10 07:55:15 字數 836 閱讀 5691

乙個整數總可以拆分為2的冪的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 總共有六種不同的拆分方式。 再比如:4可以拆分成:4=4,4=1+1+1+1,4=2+2,4=1+1+2。 用f(n)表示n的不同拆分的種數,例如f(7)=6。

分析:f(1)    (1)

f(2)   (11)(2)

f(3)   (111)(12)

f(4)   (1111)(112)(22)(4)

f(5)   (11111)(122)(14)(1112)

f(6)   (111111)(11112)(114)(1122)(222)(24)

當n為奇數時,每個劃分必然包含1,所以每一項減1得到f(n - 1), 故f(n) = f(n - 1)。當n為偶數時,可以將所有劃分歸為兩類(a類和b類),a類包含1,b類不含1.a類中每個劃分減去1得到f(n - 1), b類中肯定都是偶數,每個劃分除以2,得到f(n / 2).故f(n) = f(n - 1) + f(n / 2),綜上得到狀態方程。

**:

def f(n):

if n == 1:

return 1

if n == 2:

return 2

else:

if n % 2 != 0:

return f(n - 1)

else:

return f(n - 1) + f(n // 2)

while true:

num = int(input())

print(f(num))

任何乙個正整數都可以用2的冪次方表示

例如 137 2 7 2 3 2 0,約定a b可表示為a b 則137可表示為 2 7 2 3 2 0 進一步7 2 2 2 2 0,3 2 2 0。所以137最終可以表示為2 2 2 2 2 0 2 2 2 0 2 0 輸入 正整數 n 20 000 輸出 符合約定的n的0,2表示 在表示中不能...

判斷乙個數是2的整數次冪

private static boolean ispoweroftwo int val 或者private static boolean ispoweroftwo int val 例如 val 8,用二進位制表示 1000 val 1 7,用二進位制表示 0111 val val 1 0 原理 在二...

判斷乙個無符號整數是不是2的n次冪的冪

c版本 include unsigned int f2 int n 判斷無符號整數d是不是 2的n次冪 的冪,並指出該數 d 是 2的n次冪 的多少 e 次冪 原理 2的n次冪的冪的二進位制位中有且只有一位是1,且1後面剛好是n個0為一組 int ispowerof2power unsigned i...