簡單的快速冪演算法在資料比較大時能夠防止資料溢位,並且減少運算時間,也是初學者比較容易掌握的一種演算法
但是,我上網搜了一些後發現有的演算法模板存在漏洞,先貼出來讓大家看一下
int powermod(int a, int b, int c)
return ans;
}
大家可以 令a=2 ,b=0 ,c=1代入進去跑一下,就會發現 return ans=1 而實際上的答案應該是0
這個演算法邏輯上是沒錯的,應對大數的時候很好用,但是a=2 ,b=0 ,c=1 這種很簡單的情況卻會wa了
這裡主要是 while(b>0) 和 先將ans定義為1兩個條件使得 上述情況發生了錯誤,因此,我們只需對這種情況進行一下補充就好了
**如下:
#include#includeusing namespace std;
int main()
// if(b==0 && c==1)
// cout<<"0"《其實這個演算法好像還有問題(但我實在沒找到.......)
那個題 reduge 後ac了 .....
簡單的快速冪
題目大意 輸入b,p,k的值,求b p mod k的值。其中b,p,k k為長整型數。輸入輸出格式 輸入格式 三個整數b,p,k.輸出格式 輸出 b p mod k s s為運算結果 例如 輸入樣例 1 2 10 9 輸出樣例 1 2 10 mod 9 7 輸入樣例 2 4523 59 7762 輸...
簡單快速冪
對於求乙個數a的n次冪,我們第一想法就是呼叫包含在標頭檔案cmath或math.h標頭檔案下的pow a,n 函式,為了演算法看起來簡單用int代替大數模版。最簡單的實現就是用乙個迴圈和乙個變數,不斷用變數乘上底數,當然,這樣做的效率並不高o n include using namespace st...
簡單快速冪
本篇文章將介紹關於快速冪的知識,將會對後面的學習有所幫助。p1226傳送門 如何讓計算機計算出 a b bmod p 第一種演算法 樸實無華的 o n 演算法 long long qpow int a,int b,int p return ans 當然,以上解法肯定正確,但當 b geq 10 8 ...