擴充套件歐幾里得
擴充套件歐幾里得可以求出
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b)的一組特解
證明:
當
b
=
0
b=0
b=0時,顯然有
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0這一組解,但其實
y
y
y並非只能取零,取任何值都可以。
若
b
≠
0
b\neq 0
b=0,因為
a
x
+
b
y
=
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
%
b
)
=
b
x
+
(
a
%
b
)
y
ax+by=gcd(a, b)=gcd(b, a \%b)=bx+(a \%b)y
ax+by=gcd(a,b)=gcd(b,a%b)=bx+(a%b)y
=
b
x
+
(
a
−
⌊
a
/
b
⌋
×
b
)
×
y
=bx+(a-\lfloor a/b \rfloor \times b)\times y
=bx+(a−⌊a/b⌋×b)×y
=
b
x
+
a
y
−
⌊
a
/
b
⌋
b
y
=bx+ay-\lfloor a/b \rfloor by
=bx+ay−⌊a/b⌋by
=
a
y
+
b
(
x
−
⌊
a
/
b
⌋
y
)
=ay+b(x- \lfloor a/b \rfloor y)
=ay+b(x−⌊a/b⌋y)
即存在另一組解
y
y
y和
x
−
⌊
a
/
b
⌋
y
x- \lfloor a/b \rfloor y
x−⌊a/b⌋y
令
x
′
=
y
,
y
′
=
x
−
⌊
a
/
b
⌋
y
x^{'}=y,y^{'}=x- \lfloor a/b \rfloor y
x′=y,y′=x−⌊a/b⌋y,則有
a
x
′
+
b
y
′
=
g
c
d
(
a
,
b
)
ax^{'}+by^{'}=gcd(a,b)
ax′+by′=gcd(a,b)
即
x
′
x^{'}
x′和
y
′
y^{'}
y′是一組解
證畢
因此當 b ≠ 0 b \neq 0 b=0時,我們可以遞迴呼叫歐幾里得演算法,每次回溯的時候令 x = y , y = x − ⌊ a / b ⌋ y x=y,y=x- \lfloor a/b \rfloor y x=y,y=x−⌊a/b⌋y,最後就會得到一組可行解,這個過程有兩種表示方法。
// 1
ll exgcd(ll a, ll b, ll& x, ll& y){
if (b == 0){
x = 1;
y = 0;//等於多少無所謂
return a;
}
ll t = exgcd(b, a % b, y, x);
y -= a / b * x;
return t;
}
// 2
ll exgcd(ll a, ll b, ll& x, ll& y){
if (b == 0){
x = 1;
y = -534;
return a;
}
ll t = exgcd(b, a % b, x, y);
ll z = x;
x = y;
y = z - (a / b) * y;
return t;
}
相關文章
- 淺談擴充套件歐幾里得演算法套件演算法
- 擴充套件歐幾里得演算法公式快速推導套件演算法公式
- 尤拉函式、整除分塊和擴充套件歐幾里得函式套件
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- [待更新]歐幾里得演算法(輾轉相除法)與擴充歐幾里得演算法演算法
- 第六章 數學問題 -------- 6.5 歐幾里得演算法及其擴充套件演算法套件
- 第六章 數學問題 -------- 6.7【擴充套件歐幾里得】一步之遙套件
- 歐幾里得演算法與 EX演算法
- 萬能歐幾里得演算法演算法
- Python如何用歐幾里得求逆元Python
- 28、(向量)歐幾里得距離計算
- 類歐幾里得演算法學習筆記演算法筆記
- 演算法設計與分析-01歐幾里得演算法
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- 數論入門基礎(同餘定理/費馬小定理/擴充套件歐幾里德演算法/中國剩餘定理)套件演算法
- 洛谷 P6362 平面歐幾里得最小生成樹
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 輾轉相除法(歐幾里得演算法)(gcd)模板及其原理演算法GC
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- 歐幾里德的遊戲遊戲
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件
- SpringMVC 擴充套件SpringMVC套件
- ORACLE 擴充套件Oracle套件
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- 歐盟最大的ETF公司擴充套件加密貨幣產品套件加密
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- iOS 通知擴充套件iOS套件
- swift擴充套件ExtensionsSwift套件
- 擴充套件BSGS/exBSGS套件
- Json擴充套件方法JSON套件
- 分類擴充套件套件
- 提高擴充套件性套件