乙個整數總可以拆分為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...