在演算法競賽中,通常涉及的數論大部份是整數的代數性質
中譯 最大公因數,以下簡稱 GCD
給定整數 ,它倆各自有自己的因數[1],取相同的因數中最大的數,即最大公因數
#include<algorithm>
有內建的 __gcd
函數
CODEFORCES 1155C Alarm Clocks Everywhere
CODEFORCES 1133D Zero Quantity Maximization
CODECHEF SnackDown 2019 Round 1A Chef and Periodic Sequence
CODEFORCES 1107D Compression
是 C++ 中的取餘數運算,表示存在 滿足
輾轉相除法
給定整數 求出
令 ,根據 GCD 性質:
證明上述過程 中左參數比右參數要先變為
綜合上面過程,實作程式碼:
對於所有整數 ,存在整數 使得
LeetCode 365 Water and Jug Problem
給定整數 求出整數 滿足
令 ,配合 Bezout’s Thm 得到:
明顯的,
即 為任意整數
而根據 GCD 性質
以及
得到
也就是說
綜合上述過程:
UVa OJ 10104 Euclid Problem
UVa OJ 10090 Marbles
UVa OJ 10413 Crazy Savages
在競賽中若計算結果超出了數值範圍外,則通常會要求結果對某個數字取餘數
所以得熟悉取完餘數後的數字們之間的關係及運算。
若數字們都對 取餘數後,它們就處於"模 "的狀態下了
將 除以 的餘數記做
記得檢查若 a 為負數的情況
若 與 相等,則記 ,稱 有同餘關係
也就是說
可將括號內看作數字們處於一個特定狀態下,而模 通常會省略括號
並且若
則
CODEFORCES 1178C Tiles
CODEFORCES 1151C Problem for Nazar
CODEFORCES 1165E Two Arrays and Sum of Functions[3]
如果 互質[4],那麼
這裡 是與 互質且小於 的正整數的個數
例如 和 互質,
如果 互質,且 為質數,那麼
是歐拉定理的特例
數字們模 後,對於加法、減法、乘法,其性質都與以往差不多,但對數字做除法卻不盡人意
注意,在同餘運算中只會有整數,有理數無理數等其他數不會出現
反元素指的是元素與其運算後為單位元素的元素
例如:
而元素 的模 反元素為 滿足
根據 Bezout's Thm
也就是說 (互質), 才擁有模 反元素
根據費馬小定理有
所以 是 的模反元素
下週教的快速求冪演算法能在 得到
根據 Bezout's Thm 有
可用擴展歐幾里得演算法找到
ZERO JUDGE a289 Modular Multiplicative Inverse
CODEFORCES 300C Beautiful Numbers
NCKU OJ 22 爬樓梯 k
CODEFORCES 935D Fafa and Ancient Alphabet
給定 以及 ,其中任意 有
求滿足下式的 值為何?
要與 都有關係,所以設 ,且在模 時為
要仔細思考,怎樣的 才會符合問題中的方程式定義?
從小規模觀察,假設 , 要在
所以模數應當是對應的 因數,即 且 ,這樣
接著思考 與 的狀況
最後整理上述有
其中 為任意整數
加法最後項 表示 有多種解,是根據同餘關係有
根據上述的提示,可以嘗試推廣當 時 的解
如法泡製的將 作為對應的 因數,即
所以定義 [5],該 可推廣為 ,且 為 的模 反元素
於是推出原問題方程組的解為
其中 為任意整數,且
ZERO JUDGE d791 00756 - Biorhythms
CODEFORCES 687B Remainders Game
Kattis generalchineseremainder Chinese Remainder Theorem (non-relatively prime moduli)
TIOJ 1459 B.完全子圖