題目
x
yx^y
xy當y很大,採用如下方式
& f(x,\frac)\times f(x,\frac),(y\%2=0,y>0)\\ & 1,y=0\\ & f(x,\frac)\times f(x,\frac)\times x ,(y\%2=1,y>0) \end\right.
⎩⎨⎧f
(x,2
y)×
f(x,
2y)
,(y%
2=0,
y>0)
1,y=
0f(x
,2y
)×f(
x,2y
)×x
,(y%
2=1,
y>0)
第一行輸入t(t≤
100)
(t\leq 100)
(t≤100
)。t行,每行有三個整數x(1≤x
≤109
1\leq x \leq 10^9
1≤x≤10
9),y(1≤y
≤1018
1\leq y \leq 10^
1≤y≤10
18),p(1≤p
≤109
1\leq p \leq 10^9
1≤p≤10
9)。輸出x y%
px^y\%p
xy%p
的值。樣例輸入
12 10 10000
樣例輸出:
1024
分析與解答:
直接用遞迴,log(n)的時間複雜度。
這裡注意%p因為p有可能是1,所以每個都要加%p,還有,盡量每個數都加上%p,如果k*k%p*x%p;
少了中間那個%p,就出錯了
#include
using namespace std;
long
longf(
long
long x,
long
long y,
long
long p)
else
}int
main()
return0;
}
快速冪 迴圈 遞迴
目錄其實原理很簡單,有初一的學歷就好,你只需要知道 k為正整數 x2k xk xk x2k 1 xk xk x 任何數的0次方都為1 除0外 任何數的1次方都為它本身 至於為什麼,問數學老師去 然後一直遞迴下去即可 計算xk int poww int x int k 這個稍微有億一點點複雜 你需要知...
演算法提高 遞迴 快速冪
理解遞迴的想法不難,關鍵是如何 快速 寫出 正確 高效 的遞迴。函式遞迴呼叫的基本形式 type myfunction 下面以遞迴實現 快速冪 說明一下寫遞迴的一些注意點,這些要點是不是必要的我不知道,我想這需要嚴格的證明。一般求冪的方法是呼叫中的pow 函式,例如求 如果要造輪子的話,一種想法是用...
快速冪(遞迴和非遞迴演算法)
快速冪 exponentiation by squaring,平方求冪 簡單而高效地計算方法,演算法的時間複雜度是o log n 例題 3的5次方如何計算呢?a的n次方 p 方法一 33333 243 進行四次連乘,複雜度為o n 1 適用於a,n都很小的情況。方法二 遞迴演算法 a的n 2次方a的...