\[ \begin{aligned} &42 \div 18 = 2 ... 6\\ &60 \div 18 = 3 ... 6\\\\ &42 = 2 \cdot 18 + 6\\ &60 = 3 \cdot 18 + 6 \end{aligned} \]
當除以\(18\)的時候,\(42\)與\(60\)的餘數都是\(6\)。
\[ 42 \equiv 60 \mod{18} \]
若
\[
a \equiv b \mod n \\c \equiv d \mod n
\]
則
\[
a+c \equiv b+d \mod n\\a\times c \equiv b\times d \mod n
\]
能夠整除 \(A,B\) 的最大正整數。
考慮 \(\gcd(A, B) = g\)
\(gcd(A, B) = gcd(|A|, |B|)\)
藉由絕對值,我們可以把參數的定義域放大到所有整數。
\(gcd(A, 0) = |A|\)
可以整除 \(A\) & \(0\) 的正整數就是\(|A|\)。
\(gcd(A, B) = gcd(A\%B, B)\)
最重要的性質,我們熟悉的輾轉相除法的根據。
Note: 「%」取餘數
別名:歐幾里德演算法
\[ \begin{aligned} 78 &\div 66 = 1 ... 12\\ 66 &\div 12 = 5 ... 6\\ 12 &\div 6 = 2 ... 0\\ &\Rightarrow 6 \end{aligned} \]
若:\(g = gcd(A, B)\)
尋找一組整數對\((x,y)\)
使得:\(x\cdot A + y \cdot B = g\)
沒辦法一次到位解決的問題,可以分多次解決
\(A = 786, B = 186\),請尋找一組整數對\((x,y)\)
使得 \(x\cdot A + y \cdot B = gcd(A, B)\)
我們可以從輾轉相除法的過程找到靈感
考慮數列R,為輾轉相除法的過程餘數。
數列R | 目標 |
---|---|
786 | |
186 | |
42 | |
18 | |
6 | \(6 = x\cdot 786+ y \cdot 186\) |
如何分次解決呢?
數列R | 目標 |
---|---|
786 | \(786 = 1\cdot 786+ 0 \cdot 186\) |
186 | \(186 = 0\cdot 786+ 1 \cdot 186\) |
42 | |
18 | |
6 | \(6 = x\cdot 786+ y \cdot 186\) |
\(\because 786 \div 186 = 4 ... 42\)
\(\therefore 42 = (1) \cdot 786 + (-4) \cdot 186\)
\(42\)可拆解為 \(786\) & \(186\) 的整數倍和。
數列R | 目標 |
---|---|
786 | \(786 = 1\cdot 786+ 0 \cdot 186\) |
186 | \(186 = 0\cdot 786+ 1 \cdot 186\) |
42 | \(42 = 1 \cdot 786+ -4 \cdot 186\) |
18 | |
6 | \(6 = x\cdot 786+ y \cdot 186\) |
\(\because 186 \div 42 = 4 ... 18\)
\(\therefore 18 = (1) \cdot 186 + (-4) \cdot 42\)
\(18\)可拆解為 \(186\) & \(42\) 的整數倍和。
又 \(\because 42\) 可成功分解成 A,B 的整數倍和。
\(\therefore 18\) 可成功分解成 A,B 的整數倍和。
R | 目標 |
---|---|
786 | \(786 = 1\cdot 786+ 0 \cdot 186\) |
186 | \(186 = 0\cdot 786+ 1 \cdot 186\) |
42 | \(42 = 1 \cdot 786+ -4 \cdot 186\) |
18 | \(18 = 1 \cdot 186+ -4 \cdot (1 \cdot 786+ -4 \cdot 186)\) |
6 | \(6 = 1 \cdot (1 \cdot 786+ -4 \cdot 186)+ -2 \cdot (1 \cdot 186+ -4 \cdot (1 \cdot 786+ -4 \cdot 186))\) |
6 | \(6 = 9\cdot 786+ (-38) \cdot 186\) |
R | 786 | 168 | 42 | 18 | 6 |
---|---|---|---|---|---|
X | 1 | 0 | 1 | -4 | 9 |
Y | 0 | 1 | -4 | 17 | -38 |
講到這裡,我想這個表格就可以足夠引導各位自行完成演算法,在學習的演算法時,有時候了解核心思路之後自己寫出來,會很有成就感,也會具有更靈活運用的能力。
解題思路上面有點類似動態規劃:「小事化了、大事化小」
Codeforces 1165 E
Codeforces 1244 C
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing