學習筆記----擴充套件歐幾里德
原文連線:http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html
不明處1:由擴充套件歐幾里得定理:ax+by==gcd(a,b)---式1,而此時b==0,也就是說gcd(a,0)==a。原式變為ax+by==a --> x==1,y==0。應該夠清楚了吧
不明處2:這裡先說明一下我的一些規則,x,y表示第一次遞迴時的值,x1,y1表示第二次遞迴時的值。那麼
gcd(a,b)==gcd(b,a%b),同時都代入式1,有ax+by==b*x1+(a%b)*y1。將右邊變形一下
b*x1+(a%b)*y1==b*x1+(a-(a/b)*b)*y1==a*y1+b*(x1-(a/b)*y1),最終得到ax+by==a*y1+b*(x1-(a/b)*y1)
也就是說,上一深度的x等於下一深度的y1,上一深度的y等於下一深度的x1-(a/b)*y1。 需要注意,上面推導時用的除法都是整型除法
到這裡為止,我們便得到了不定式ax+by==gcd(a,b)的一組解,x、y。
那麼對於一般的不定式ax+by==c,它的解應該是什麼呢。很簡單,x1=x*(c/gcd(a,b)),y1=y*(c/gcd(a,b))。很好理解吧~
再深入一點,就解出這麼一組解其實一般來說是解決不了什麼問題的。沒有哪個ACM的題這麼簡單吧。。。比如我們現在要得到所有的解,那麼這所有的解究竟是什麼呢?
直接說吧,假設d=gcd(a,b). 那麼x=x0+b/d*t; y=y0-a/d*t;其中t為任意常整數。
這個是怎麼推匯出來的,說實話我也不知道,就先這麼記著吧!
PS:這裡說一下那個公式為什麼對。已知a*x+b*y = d <==>(a/d)*x+(b/d)*y = 1(1); 設x0,y0.是滿足條件的一組解。將x = x0+b/d*t;y = y0-a/d*t;帶入(1)中得到a/d*x0+t+b/d*y0-t = 1;顯然這是對的啊。
擴充套件歐幾里德模版:
LL exit_gcd(LL a, LL b)
{
if(b == 0)
{
x = 1;
y = 0;
return a;
}
LL p = exit_gcd(b, a%b);
LL t = x;
x = y;
y = t-(a/b)*y;
return p;
}
相關文章
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- 擴充套件歐幾里得套件
- 淺談擴充套件歐幾里得演算法套件演算法
- 擴充套件歐幾里得演算法公式快速推導套件演算法公式
- 類歐幾里得演算法學習筆記演算法筆記
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- C#學習筆記(補充)——擴充套件方法、事件C#筆記套件事件
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- 歐幾里德的遊戲遊戲
- C#學習筆記-方法引數、擴充套件方法C#筆記套件
- 擴充套件中國剩餘定理(EXCRT)學習筆記套件筆記
- 第六章 數學問題 -------- 6.7【擴充套件歐幾里得】一步之遙套件
- ES6學習筆記4--字串的擴充套件筆記字串套件
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 數論入門基礎(同餘定理/費馬小定理/擴充套件歐幾里德演算法/中國剩餘定理)套件演算法
- System Design 關係型資料庫的擴充套件 - 學習筆記資料庫套件筆記
- sql中的擴充套件學習SQL套件
- 擴充套件包 Laravel-compass 使用筆記套件Laravel筆記
- ES6語法學習筆記之陣列與擴充套件運算子筆記陣列套件
- web前端雜記:深入瞭解原理,擴充套件學習Web前端套件
- Minecraft中BossBar、Recipe的底層實現與擴充套件應用(學習筆記)Raft套件筆記
- Laravel深入學習7 – 框架的擴充套件Laravel框架套件
- pcntl擴充套件學習筆記一(pcntl_fork與pcntl_wait,序列執行分析)套件筆記AI
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 技術筆記(10)Unity編輯器擴充套件筆記Unity套件
- [外掛擴充套件]馬克筆記MarkDoc0.1套件筆記
- Kotlin的幾個擴充套件函式Kotlin套件函式
- Scikit-learn可擴充套件學習簡介套件
- 學習PHP中YAML操作擴充套件的使用PHPYAML套件
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 從EventBus學習擴充套件Weex事件機制套件事件
- es6陣列擴充套件的學習陣列套件
- php 擴充套件安裝(隨筆)PHP套件
- js筆記三十四之原型鏈模式擴充套件(1)JS筆記原型模式套件
- js筆記三十五之原型鏈模式擴充套件(2)JS筆記原型模式套件
- 再學Blazor——擴充套件方法Blazor套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Kotlin學習快速入門(7)——擴充套件的妙用Kotlin套件
- PHP中非常好玩的Calendar擴充套件學習PHP套件