快速冪
傳統的求冪演算法時間複雜度非常高(為o(指數n)),因為當指數n非常大的時候,需要執行的迴圈操作次數也非常大,而快速冪能幫我們以相對更少的時間算出指數非常大的冪。
快速乘加法比乘法快。可以用較多的加法來取代乘法來減少時間複雜度(乘法分配律?)
見:(絕不承認自己懶)
#include
#define ll long long
ll mul_mod
(ll a,ll b,ll c)
//a*b mod c快速乘
return ans;
}ll pow_mod
(ll a,ll b,ll c)
//a^b mod c快速冪
return res;
}int
main()
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x3f3f3f3f
const
int max=
1e6+50;
using
namespace std;
ll pow_mod
(ll a,ll b,ll c)
return res;
}int
main()
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x3f3f3f3f
const
int max=
1e5+50;
using
namespace std;
ll mul_mod
(ll a,ll b,ll c)
//a*b mod c
return ans;
}ll pow_mod
(ll a,ll b,ll c)
//a^b mod c
return res;
}int
main()
printf
("%lld\n",(
pow_mod(2
,a,b)-2
+b)%b);}
return0;
}
注意到模板中快速冪函式的這兩行
if
(b%2
) res=
(res*a)
%c;//res=mul_mod(res,a,c);
a=(a*a)
%c;//a=mul_mod(a,a,c);
例題二的**中用的注釋中的格式,在快速乘的基礎上執行快速冪,更快,有的題不需要(如題一),而有的題則必須這樣用(如題二,不調快速乘a不了),建議直接按注釋格式打板子吧,誰嫌快呢 照看小貓(快速乘 快速冪取模)
在乙個風和日麗的午後,少佐給薇爾莉特伊芙嘉登安排了乙個任務。任務大致是這樣的,接下來的一周,薇爾莉特需要照顧 n 只小貓咪。為了方便管理這n 只貓咪,薇爾莉特準備給每只貓咪取乙個獨一無二的名字。取名字要徵求貓咪本咪的同意才可以。但這些貓咪都非常有個性,絕不接受很長的名字。現給出每只貓咪所能容忍名字的...
快速冪 快速冪取模
快速冪的思想在於快速求解高冪指數的冪運算 複雜度為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...