NKOI 3464 快速乘積

2021-07-22 04:19:31 字數 952 閱讀 8379

快速乘積

time limit:10000ms  memory limit:65536k

total submit:32 accepted:18

case time limit:1000ms

description

給你乙個正整數n(1<=n<=1000),問最少需要幾次乘法和除法計算就能從x得到xn?

例如得到x31需要六次計算:

1.x2=x*x

2.x4=x2*x2

3.x8=x4*x4

4.x16=x8*x8

5.x32=x16*x16

6.x31=x32/x

當然,也可以是x^2 = x × x, x^3 = x^2 × x, x^4 = x^2 × x^2, x^7 = x^4 × x^3, x^11 = x^4 × x^7, x^22 = x^11 × x^11, x^33 = x^11 × x^22, x^31 = x^33 / x^2. 但這種計算的次數不是最少的。

注意:計算過程中指數不能是負數

input

輸入乙個正整數n

output

輸出乙個整數,表示最少需要計算的次數

sample input

樣例1:

31樣例2:

70

sample output

樣例1:

6樣例2:

8

#include#includeusing namespace std;

int n,depth,pow[5000];

bool dfs(int k,int cur)

return 0;

}int main()

cout<

快速冪 快速乘

直接求解,需要迴圈b次。思路 將b轉化為二進位制。對應為1的次數的冪保留,只需要將保留的冪的結果進行乘積就是a b。class solution def fast self,a,b b bin b 2 res 1for i in b 1 if i 1 res res a a a return res...

快速乘,快速冪

老是忘記還是寫下來記錄一下 快速乘,和快速冪都是防止爆int,或long long,如果爆longlong可以選擇兩者結合,或者使用 int128 上網搜了還是不懂 例題 include iostream using namespace std int main b b 2 a a a m cout...

快速冪 快速乘

快速冪等演算法都是基於二進位制優化的演算法,本文不做過多敘述,在此只是留下模板,並介紹 o 1 快速乘 int qpow int a,int b,int p define qword long long qword qmul qword a,qword b,qword p 利用 a b pmod p...