思路:因為就普通的求法把每個的冪都算出來再相加的話,數會特別大,執行速度跟記憶體都會消耗特別大,所以採用了快速冪取法,**中有詳細思路
#include
#include
#include
#include
using namespace std;
//如果不設成全域性變數的話就會出錯,因為這些量的值是在改變的
int ans = 0;//用來儲存結果
int a = 0, b = 0;//定義底數和冪
int c = 0;//定義餘數
//求a的b次方取模後的值
int quick(int a, int b, int c)
b >>= 1;//b右移一位,也就是判斷b的下乙個二進位制位置上的值是1還是0
a = (a*a) % c;//雖然的b的二進位制位上為0不用計算,但是a的值得繼續往上增,因為就算b的對應位置上為0,但是b還是在繼續增加
}return ans;
}int main()
printf("%d\n", ans);//得到一組資料的結果
}//cout << ans<
return 0;
}
poj 1995 快速冪 裸
那麼我們就來說一說快速冪吧 a b 1.如果b是偶數,我們可以記k a2 mod c,那麼求 k b 2 mod c就可以了。2.如果b是奇數,我們也可以記k a2 mod c,那麼求 k b 2 mod c a mod c k b 2 mod c a mod c 就可以了。那麼我們可以得到以下演算...
快速冪 快速冪取模
快速冪的思想在於快速求解高冪指數的冪運算 複雜度為o log2n 與樸素運算相比有很大的改進 接下來給出 其中有詳解 include include using namespace std typedef long long ll ll pow1 int a,int b 最常規的方法 將冪指數轉化為...
快速冪 快速冪取模
求x m 一般方法是 xm x xm 1,這樣需要做m次乘法,未免過慢。加速方法有兩種。1.基於當m為偶數時,xm x2 m 2 當m為奇數時,xm x xm 1。顯然當m為偶數時m會減半,當m為奇數時,下次就是偶數。m可以很快收斂到0.表示冪 2.將m看成二進位制串mkmk 1 m1m0,那麼xm...