【模板】【數論】gcd和exgcd
歐幾里得演算法:
歐幾里得定理:gcd(a,b)=gcd(b,amodb)
證明:
a 可以表示成 a = kb + r(a,b,k,r皆為正整數,且 r < b),則 r = a mod b
假設 d 是 a , b 的一個公約數,記作 d | a , d | b,即 a 和 b 都可以被 d 整除。
而 r = a - kb,兩邊同時除以 d,r / d = a / d - kb / d = m,由等式右邊可知m為整數,因此 d | r
因此 d 也是 b , a mod b 的公約數
假設 d 是 b , a mod b 的公約數, 則 d | b , d | (a - k * b) , k 是一個整數,
進而 d | a .因此 d 也是 a , b 的公約數
因此(a , b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證。
程式碼:
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
擴充套件歐幾里得演算法:
描述:
求形如
程式碼
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)//遞迴邊界
{
x=1,y=0;
return a;
}
else
{
exgcd(b,a%b,x,y);
int t=x ;
x=y;
y=t-a/b*y;
}
}
證明(字寫的醜請見諒):
用途:
1.解不定方程
2.在
3.求解線性同餘方程(轉化成上述的不定方程來解)
相關推薦
【模板】【數論】gcd和exgcd
歐幾里得演算法: 歐幾里得定理:gcd(a,b)=gcd(b,amodb) 證明: a 可以表示成 a = kb + r(a,b,k,r皆為正整數,且 r < b),則 r = a mod b 假設 d 是 a , b 的一個公約數,記作
【模板練習——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];
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
TP5本地執行正常,線上執行某頁面出現【模板檔案不存在】問題的解決辦法
相信許多小夥伴和我一樣,明明在本地執行頁面一切正常,而到線上(本人是用的虛擬主機)出現瞭如下圖的問題: 其實這個問題出現的原因很簡單,就是我們開發是在windows 系統下,windows系統對大小寫不敏感,而虛擬主機Linux,區分大小寫,所以解決辦法很簡單,如下圖所示: 解決方法就
【模板】【數論】快速冪和快速乘法
快速冪 快速冪取模演算法可以在O(log2b)的時間內求出abmodp的值。 運用了二進位制的思想,實質是對b進行二進位制分解。 程式碼: typedef long long LL; LL ksm(int a,int b,int p)//最好不要把函
【模板篇】NTT和三模數NTT
就會 CP 可能 復數 inline gin Go algo += 之前寫過FFT的筆記. 我們知道FFT是在復數域上進行的變換. 而且經過數學家的證明, DFT是復數域上唯一滿足循環卷積性質的變換. 而我們在OI中, 經常遇到對xxxx取模的題目, 這就啟發我們可不可以在
【Java】itext根據模板生成pdf(包括圖片和表格)
金額 res report als fields positions 創建模板 bst open() 1、導入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar。 2、新建word文檔,創建模板,將文件另存為pdf,並用Ado
【數論】Sumdiv(整數的唯一分解定理+約束和公式+遞歸求等比)
ali 同余模公式 left 一個 c++ 出現 素數分解 code 特殊 來源:https://blog.csdn.net/lyy289065406/article/details/6648539 題目描述 Consider two natural numbers A a
C++標準庫和標準模板庫【轉】
(轉自:https://blog.csdn.net/rl529014/article/details/51154798) C++強大的功能來源於其豐富的類庫及庫函式資源。C++標準庫的內容總共在50個標準標頭檔案中定義。 在C++開發中,要儘可能地利用標準庫完成。這樣做的直接好處包括
【模板】平衡樹——Treap和Splay
二叉搜尋樹($BST$):一棵帶權二叉樹,滿足左子樹的權值均小於根節點的權值,右子樹的權值均大於根節點的權值。且左右子樹也分別是二叉搜尋樹。(如下) $BST$的作用:維護一個有序數列,支援插入$x$,刪除$x$,查詢排名為$x$的數,查詢$x$的排名,求$x$的前驅後繼等操作。 時間複雜度:$O(運
清點人數【樹狀陣列單修字首和模板】
題目傳送門:http://oi.cdshishi.net:8000/problempage.php?problem_id=3860 太水了,,,比模板還水,,模板好歹要帶一個r-(l-1),這個直接查字首和,,太水了 #include<bits/stdc++.h> #defi
【Spring4(三)】Spring的事務管理和JDBC模板的使用
Spring 的 AOP 的基於 AspectJ 註解開發 Spring 的基於AspectJ 的註解的 AOP 開發 建立專案,引入 jar 包 引入配置檔案 applicationContext.
【模板篇】數論大雜燴~
離省選已經不剩幾天了, 然而自己還是啥也不會, 所以就臨陣磨槍刷一刷板子, 萬一用上了就賺到了~~ 這一篇就寫寫數論?(希望只考到自己打的板子然而這是不可能的←_← 儘量不壓行吧, 能寫得好懂點就寫得好懂一點吧... (為了省事就全開long long了哈, 卡常題請謹慎複製...) 裡面列舉的內容可能沒啥規
【模板】快速數論變換ntt(long long版)
快速數論變換ntt(long long版) const LL P = 50000000001507329LL; //190734863287 * 2 ^ 18 + 1 //const int P = 1004535809LL; //479 * 2 ^ 21 + 1 //const i
【模板】快速數論變換ntt
轉自http://blog.csdn.net/zz_1215/article/details/40430041 快速數論變換模板: #include <iostream> #include <string.h> #include <stdio.h&g