【模板】【數論】快速冪和快速乘法
快速冪
快速冪取模演算法可以在
運用了二進位制的思想,實質是對b進行二進位制分解。
程式碼:
typedef long long LL;
LL ksm(int a,int b,int p)//最好不要把函式名取成power、modpower之類的,考試的時候可能會掛233
{
LL res=1;
while(b)
{
if(b&1) res=res*a%p;//如果b是奇數,或者說當前這一位二進位制是1
a=a*a%p;//計算a^2,a^4,a^8,a^16...,a^(2^i)
b>>=1 ;//b除以2,或者說處理下一位二進位制
}
return res;
}
快(龜)速乘法
“快”讀作“龜”(霧
在
主要用途是解決大數相乘,而且模數較大的問題。如兩個1e18級別的數相乘,模數也是1e18級別。任憑你怎麼取模,最後還是要爆long long。解決方法之一是寫高精度乘法和高精度取模。但是我很懶,並不想寫高精度。那該怎麼辦?可以把乘法轉化成加法。我一個個地在答案上加a,每加一個a取一次模,這樣總不會爆long long了吧!但是這樣的時間複雜度太高,估計算一輩子也算不完。我們可以藉助快速冪的思想,創造一種“快速乘法”演算法,就是把快速冪裡面所有的乘號換成加號。
再強調一遍,雖然這個演算法被叫做“快速乘法”,但是它並不如直接做乘法快!
程式碼:
typedef long long LL;
LL ksc(int a,int b,int p)//拼音大法好
{
LL res=0;//注意初始答案是0而不是1
while(b)
{
if(b&1) res=(res+a)%p;
a=(a+a)%p;
b>>=1;
}
return res;
}
相關推薦
【模板】【數論】快速冪和快速乘法
快速冪 快速冪取模演算法可以在O(log2b)的時間內求出abmodp的值。 運用了二進位制的思想,實質是對b進行二進位制分解。 程式碼: typedef long long LL; LL ksm(int a,int b,int p)//最好不要把函
快速冪和快速冪取模
它的 signed 1.5 原來 現在 轉化 mil ram 自己 首先,快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素算法就是把a連乘b次,這樣一來時間復雜度是O(b)也即是O(n)級別,快速冪能做到O(logn),快了好多好多。它的原理如下: 假設我們要
快速冪和快速乘法
RT ll Quick_Pow(ll a,ll n) { ll ret=1; ll temp=a%p; while (n){ if (n&1) ret
【FZU - 1759】Super A^B mod C (數論,快速冪,快速乘,尤拉降冪,指數迴圈節,模板)
題幹: Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000). Input There are mult
快速冪模板【快速冪+矩陣快速冪】
快速冪模板: 引入:就是將冪以二進位制數分解,比如5的6次方,6被分解為2,4,即110,110&1為0,不執行ans=ans*a%mod,但是a=a*a每迴圈一次就執行一次,現在a=5*5,下一次迴圈11&1==1,執行ans=1*25,a=25*25;1
#121-【快速冪和慢速乘】序列的第K個數
Description BSNY 在學等差數列和等比數列,當已知前三項時,就可以知道是等差數列還是等比數列。現在給你序列的前三項,這個序列要麼是等差序列,要麼是等比序列,你能求出第 k 項的值嗎。 如果第 k 項的值太大,對 200907 取
【學習筆記】快速冪+矩陣+矩陣乘法+矩陣快速冪
今天晚上我學習了矩陣 1、快速冪 通常,我們要算bpmodkbpmodk是這麼算的: ans := 1; for i := 1 to p do ans := ans * b mod k;
【板子】gcd、exgcd、乘法逆元、快速冪、快速乘、篩素數、快速求逆元、組合數
1.gcd int gcd(int a,int b){return b?gcd(b,a%b):a;} 2.擴充套件gcd )extend great common divisor ll exgcd(ll l,ll r,ll &x,ll &
【模板練習——AC自動機】Keywords Search HDU - 2222
rpg soc key words 練習 evm cdc rmi css x床堂0jz直寐0裙brhttp://tushu.docin.com/sghp1512 6茲c苯晌62恢uk爻2http://tushu.docin.com/ipt586 gw誹喜2i4偎e2擻a
BZOJ 2038 2009國家集訓隊 小Z的襪子【模板·莫隊】
com 技術 bsp 高效 題解 數量 div image 概率 【題解】 1,先說說莫隊算法。 莫隊算法是用來離線處理區間問題的算法。非常易於理解和使用,且運用十分廣泛。 假設我們現在已知區間[L,R]的答案,如果我們能以較低的時間復雜度擴展得到區間
【模板·並查集】洛谷 P3367 【模板】並查集
題目:並查集 思路: 複習…… 第一次提交忘寫路徑壓縮T了…… 結論:打過再多遍的模板也要檢查一下啊…… 程式碼: #include<bits/stdc++.h> using namespa
【模板·次小生成樹】 The Unique MST
程式碼: #include<cstdio> #include<vector> #include<cstring> #include<algorithm>
【模板·樹的重心】 codevs 3639 樹的中心
題目:樹的中心 樹的重心 找到一個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹儘可能平衡。 所以dfs下就好了。 程式碼: #include<bits/stdc++.h> using names
【模板·字尾陣列/sa】洛谷 P3809 【模板】字尾排序
題目:字尾排序 程式碼: #include<bits/stdc++.h> using namespace std; #define maxn 1000000 int n,m; char a[maxn+5]; int sa[maxn+5],rk[maxn+5];
【精華】排序演算法彙總——氣泡排序和快速排序
日常說明:有錯誤歡迎大家指正。另外本部落格所有的程式碼博主編寫後均除錯通過。重要提醒!!!!博主使用的是VS2017,如果有低版本的小夥伴最好新建空專案將此程式碼複製上去。 更多演算法請關注我的演算
HDU1395 ZOJ1489 2^x mod n = 1【暴力法+數論】
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17824 Accepted Submission(s
【拉格朗日求自然數冪和】cf622F
F. The Sum of the k-th Powers There are well-known formulas: , , . Also mathemati
TP5本地執行正常,線上執行某頁面出現【模板檔案不存在】問題的解決辦法
相信許多小夥伴和我一樣,明明在本地執行頁面一切正常,而到線上(本人是用的虛擬主機)出現瞭如下圖的問題: 其實這個問題出現的原因很簡單,就是我們開發是在windows 系統下,windows系統對大小寫不敏感,而虛擬主機Linux,區分大小寫,所以解決辦法很簡單,如下圖所示: 解決方法就
快速冪和矩陣快速冪模板
style class 計算 res can scan urn oid 模板 快速冪模板: ll qmod(ll x,ll n,ll mod) { ll res=1; while(n){ if(n&1) res=(res*x)%mo
快速冪+矩陣快速冪模板
#include<iostream> #include<cstring> #include<cmath> #include<cstdlib> #include<cstdio> #include<algorithm> #inc