學習筆記----擴充套件歐幾里德
原文連線: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;
}
相關文章
- swift學習筆記4——擴充套件、協議Swift筆記套件協議
- Swift學習筆記(二十六)——擴充套件Swift筆記套件
- C#學習筆記(補充)——擴充套件方法、事件C#筆記套件事件
- 擴充套件中國剩餘定理(EXCRT)學習筆記套件筆記
- 【總結】理解歐幾里德及擴充套件歐幾里德演算法套件演算法
- ES6學習筆記4--字串的擴充套件筆記字串套件
- 《從零開始學Swift》學習筆記(Day 49)——擴充套件宣告Swift筆記套件
- C# 2008 學習筆記 - 擴充套件函式C#筆記套件函式
- One Person Game(zoj3593+擴充套件歐幾里德)GAM套件
- 可擴充套件性筆記一套件筆記
- C Looooops(poj2115+擴充套件歐幾里德)OOP套件
- sql中的擴充套件學習SQL套件
- System Design 關係型資料庫的擴充套件 - 學習筆記資料庫套件筆記
- 《從零開始學Swift》學習筆記(Day 51)——擴充套件建構函式Swift筆記套件函式
- HDU 1222 Wolf and Rabbit (擴充套件歐幾里德應用)套件
- web前端雜記:深入瞭解原理,擴充套件學習Web前端套件
- ES6語法學習筆記之陣列與擴充套件運算子筆記陣列套件
- 《從零開始學Swift》學習筆記(Day 50)——擴充套件計算屬性、方法Swift筆記套件
- ASP.Net MVC開發基礎學習筆記(2):HtmlHelper與擴充套件方法ASP.NETMVC筆記HTML套件
- 擴充套件包 Laravel-compass 使用筆記套件Laravel筆記
- Laravel深入學習7 – 框架的擴充套件Laravel框架套件
- Flask學習日誌(五) - Flask擴充套件Flask套件
- 高擴充套件性的學習路線套件
- [外掛擴充套件]馬克筆記MarkDoc0.1套件筆記
- .Net開發筆記(十七) 應用程式擴充套件筆記套件
- 技術筆記(10)Unity編輯器擴充套件筆記Unity套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 學習PHP中YAML操作擴充套件的使用PHPYAML套件
- es6陣列擴充套件的學習陣列套件
- 從EventBus學習擴充套件Weex事件機制套件事件
- Scikit-learn可擴充套件學習簡介套件
- POJ 2115-C Looooops-擴充套件歐幾里德演算法OOP套件演算法
- pcntl擴充套件學習筆記一(pcntl_fork與pcntl_wait,序列執行分析)套件筆記AI
- C#可擴充套件程式設計之MEF學習筆記(五):MEF高階進階C#套件程式設計筆記
- php 擴充套件安裝(隨筆)PHP套件
- 再學Blazor——擴充套件方法Blazor套件
- js筆記三十四之原型鏈模式擴充套件(1)JS筆記原型模式套件