快速乘積
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:sample output31樣例2:
70
樣例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...