遞迴 快速冪

2021-09-16 21:04:52 字數 1140 閱讀 3882

題目

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的...