對著演算法導論上寫不行,因為導論上預設b對應二進位制存入陣列中
但實際上取不出來,所以需要移位操作,會想到用向左移位,每次恰好讀的是最高位
但這樣是錯誤的,因為左移等價於乘以2,所以這個數一直在增長,直到超出資料範圍變為負值才會結束
所以應該採用右移位
對應的**如下:
#include using namespace std;
int mod_exp(long long a, long long b, long long n)
return ans%n;
}int main(void)
return 0;
}
資料型別採用int時,需要cout << mod_exp(a%10, a, 10) << endl;
不然會wa掉,我猜是給出的資料大小超出了int
數論學習筆記 快速冪 取模運算
快速冪,就是冪運算的一種快速演算法,它的時間複雜度為 在了解快速冪之前,我們需要先了解一下傳說中的二進位制。要知道,這個世界上只有10種人,一種是懂二進位制的人,另一種是不懂二進位制的人。滑稽 相對於十進位制,我們生活中所用的是十進位制,滿十進一。那麼二進位制,顧名思義,就是滿二進一。就像上上段的那...
快速冪 快速冪取模
快速冪的思想在於快速求解高冪指數的冪運算 複雜度為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...