求整數冪問題

2022-01-11 15:21:05 字數 2268 閱讀 4828

問題:

過程演示:

\[x^3 = x * x * x, \ x^9 = x^3 * x^3 * x^3, \ x^ = x^9 * x^9 * x^9

\]\[x^2 = x * x, \ x^4 = x^2 * x^ 2, \ x^8 = x^4 * x^4, \ x^ = x^8 * x^8, \ x^ = x^ * x^8 * x^2 * x

\]上面的方法利用的其實就是分治思想:

\[x^n = \begin (\displaystyle)^} \quad n \ is \ not \ even \\ (\displaystyle)^} * x \quad otherwise \end

\]2.2.1、**

int power(int x, int n)

2.1.2、複雜度分析2.2.1、**
int power(int x, int n)

return res;

}

2.2.2、分析與理解

這個演算法該如何理解,我們可以借助leetcode的官方題解(來分析:

我想了很長時間,令我困惑的點是在每一次迭代時,n為奇數和n為偶數的情況為什麼會是這樣處理,現在借助這個題解,我們理解起來會容易很多。

我們把一開始的x給剝離出來,它到最後一次迭代時,它的冪一定是不超過n的最大的2的整數次冪,比如,n為77時,那麼x最後的冪就是64,n為60時,x最後的冪就是32;我們可以列乙個式子:

\[① \ x \rightarrow x^2 \rightarrow x^4 \rightarrow^ x^9 \rightarrow^ x^ \rightarrow x^ \rightarrow^ x^

\]\[② \ x \rightarrow x^2 \rightarrow x^4 \rightarrow x^8 \rightarrow x^ \rightarrow x^ \rightarrow x^

\]我們迭代的順序是從後往前,所以x的值的變化是這樣的:

\[③ \ x^ \rightarrow x^ \rightarrow x^ \rightarrow x^8 \rightarrow x^ \rightarrow x^ \rightarrow x

\]這裡解釋一下 \(x^ \rightarrow^ x^\) 中額外乘的 x 在之後被平方了兩次,因此在 \(x^\) 中貢獻了 \(x^ = x^4\),我們知道,我們的 x 只儲存了 x 的2的乘冪次方(即②式中的各個數),而遇到奇數時,多出來的乙個 x 所貢獻的次數就儲存在了res中,我想,大家所疑惑的就是為什麼就要恰好儲存迭代到那一次時的 x,我們用式子來解釋一下:

我們把 \(x^9\) 中多出來的乙個 x 給拆解出來,那麼:

\[x^ \rightarrow x^ \rightarrow x^ \rightarrow x^

\]即,在 \(x^\) 中貢獻了 \(x^ = 8\) 。類似地,我們把奇數次的迭代時的需要貢獻的值儲存在 res 中,最後再與最後的 x 的值合併,就得到最後的結果了。

2.2.3、複雜度分析

\[x^n = \begin \displaystyle}} * \displaystyle}} \quad n \ is \ not \ even \\ \displaystyle}} * \displaystyle}} * x \quad otherwise \end

\]3.2.1、**

int power(int x, int n)

3.2.2、複雜度分析

3.2.3、解決辦法

遞迴**

int power(int x, int n)

時間複雜度分析:

迭代**

int power(int x, int n)

return res;

}

時間複雜度分析:

快速冪演算法和大整數求模

1.快速冪的演算法 1 當我們求乙個數的n次方的的結果時,若直接選擇for迴圈,來累乘的話,效率很低,時間複雜度位o n 而當我們選擇快速冪來計 算時,時間複雜度能達到o logn 快了很多。快速冪的基本方法基於二進位制,將n次方分解,每次計算平方。如下 假設我們要求5 23 5的23次方 因為23...

求浮點數的整數次冪

求浮點數的整數次冪 不使用 math.pow 方法 pow 0.99,365 0.025 每天做少一點,每年積累的僅有40分之一 pow 1.01,365 37.78 每天努力一點,每年收穫38倍成果 param number double param times int return double...

常規求冪 二分求冪 快速位求冪

題目描述 給定數字a,b,求a b。思路 解法包括常規求冪 二分求冪 快速求冪 位運算 每一種求法中,要根據b的值進行討論,b 0,0,0。1 常規求冪 常規求冪即是根據ans a a a a。根據b的個數來就行求解 2 二分求冪 二分求冪是可以將乘法進行分組 比如a a a a a a a a a...