輸出整數的冪 演算法系列之快速冪

2021-10-14 20:54:47 字數 1065 閱讀 8162

今天常規,分享乙個套路模板,快速求解快速冪問題。

題目:

求 a 的 b 次方對 p 取模的值。

輸入格式

三個整數 a,b,p ,在同一行用空格隔開。

輸出格式

輸出乙個整數,表示a^b mod p的值。

資料範圍

0≤a,b,p≤10^9

資料保證 p≠0

輸入樣例:

3 2 7

輸出樣例:

2

資料範圍位10^9,c++ 的o(n)級別演算法支援10^7-10^8之間,所以需要比o(n)運算還快的logn演算法。本題考察:快速冪。

實現方式分為遞迴與非遞迴。

思想

例如:5^10 = 5^2*5^8

遞迴法

上述方式3很快想到遞迴法解決。折半為奇,則a*f(a,b-1),為偶,則先保留一半的結果:f(a,b/2),再平方。

遞迴出口:冪為0,也就是b為0,此時直接返回1即可。

本題是對乙個p進行前模,兩個數相乘容易溢位,我們轉long long型別,比較簡單寫法直接在第乙個乘數後面乘上1ll。

int pow(int a,int b,int p)  

int temp = pow(a,b/2,p);

return temp*1ll*temp%p;

}

非遞迴法

我們把5的10次方寫成,5^(1010)。上面1010為10的二進位制表示。可以把它拆分為5^(1000) * 5^(10), 我們知道5^(1000...00)是5^1*5^2*5^4.....。實現如下:

整數的冪運算 快速冪

題目描述 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。一開始最簡單的思路是,用乙個while迴圈直接乘出結果,太簡單 就不貼了,複雜度是o n 發現有更快的演算法,叫快速冪,複雜度為o lgn public class solutio...

演算法手記之快速冪

快速冪是一種快速求出 ab 的值的演算法,複雜度為o logn 而一般的樸素演算法是由乙個for迴圈慢慢算,算完需要o n 的時間,這顯然不符合yxh老師高山流水般的思路,所以我們需要乙個高效的演算法來解決這個問題。快速冪的原理 假設要求211的值,指數11可以使用二進位制的形式寫成11 20 21...

C 演算法之 快速冪

快速冪 quick power,以下簡稱qpw 是math.h或cmath裡的內建函式pow的公升級版 只不過是比pow快了一些 qpw函式需要實現以下的條件 宣告ans變數,賦值為1 如果指數為奇數,ans乘上原數 原數 原數的平方,指數除以2 如果b 0,返回ans,否則重複執行2,3步 注意取...