nyoj 46 最少乘法次數 (遞推)

2021-09-26 22:00:40 字數 833 閱讀 7566

給你乙個非零整數,讓你求這個數的n次方,每次相乘的結果可以在後面使用,求至少需要多少次乘。如24:2*2=22(第一次乘),22*22=24(第二次乘),所以最少共2次;

第一行m表示有m(1<=m<=100)組測試資料;

每一組測試資料有一整數n(0輸出每組測試資料所需次數s;

複製

323

4

122

分析:

1、我們可以將問題進行反向思考:

①、如果每一次可以做到一半與一半相乘(偶數)

②、或者是2 * 2^(n-1) * 2^(n-1),即就是一半與一半相乘的結果再乘以2(奇數)

2、那麼得到的結果就是最少的相乘次數

核心**:

1

while(n != 1)2

8else

913 }

c/c++**實現(ac)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 

1011

using

namespace

std;

1213

intmain()

1428

else

2933

}34 printf("

%d\n

", cnt);35}

36return0;

37 }

nyoj 46 最少乘法次數

最少乘法次數 問題描述 給定乙個正整數n,求2 的n次冪,每次相乘的結果,後面也能使用。現求至少需要多少步,能得到2 n.例如2 4,2 2 2 2,2 2 2 2 2 所以,答案為 求解 每次都是乘 我們很容易想到 進製。現在有沒有想到我們中國那句古話,叫做 擒賊先擒王 聯絡到這道題上,我們可以先...

NYOJ 46 最少乘法次數 數論

思路 能夠化成二進位制來求解。結果是最高位的位數 1 最高位後面1的個數。比如 對於3。它的二進位制 為11,就是用這個最高位 2 1 加上後面的1的個數 1個 用最高位1的目的是他能代表了轉化的次數,由於2 2 4,4 4 8 8 8 16.include include include incl...

NYOJ 46最小乘法次數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 給你乙個非零整數,讓你求這個數的n次方,每次相乘的結果可以在後面使用,求至少需要多少次乘。如24 2 2 22 第一次乘 22 22 24 第二次乘 所以最少共2次 輸入 第一行m表示有m 1 m 100 組測試資料 每一組測試...