快速乘 快速冪 取模

2021-10-11 11:43:18 字數 1588 閱讀 2100

快速冪

傳統的求冪演算法時間複雜度非常高(為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...