0x32.2 最大公约数

定义:

正整数 \(d|a, d|b\),则称 \(d\)\(a,b\) 的公约数。

在所有公约数中最大的一个,称为最大公约数。记作\(\gcd(a, b)\)

\(d = 1\),我们称\(a,b\)互素。

最小公倍数记作\(lcm(a, b)\)

性质1: \(\gcd(ka, kb) = k\gcd(a, b)\)
性质2: \(\gcd(a, b) * lcm(a, b) = a * b\)

最大公约数的计算方法

  • 更相减损术

\(gcd(a, b) = gcd(b, a - b)\) \((a > b)\)

  • 欧几里得算法(辗转相除法)

    \(\gcd (a, b) = \gcd(b, a \% b)\)



#### 例1 hankson的趣味题 $n$次询问,每个询问中,给定四个正整数$a,b,c,d$,然后求有多少个$x$满足$\gcd(a, x) = c$, $lcm(b, x) = d$.

输入数据保证 \(a\) 能被 \(c\) 整除, \(d\) 能被 \(b\) 整除。

数据范围:
对于50%的数据,保证\(1 \le a, b, c, d \le 10000\)\(n \le 100\).
对于100%的数据,保证有\(1 \le a, b, c, d \le 2,000,000,000\)\(n \le 2000\).

法1: 暴力枚举d的所有因数,检查是否满足题意。时间复杂度\(O(n \sqrt d \log d)\)


法2:
\(a = {p_1}^{c_1} {p_2}^{c_2} {p_3}^{c_3}...{p_n}^{c_n}\).

\(b = {p_1}^{k_1} {p_2}^{k_2} {p_3}^{k_3}...{p_n}^{k_n}\).

那么
\(\gcd(a,b) = {p_1}^{\min\{c_1, k_1\}}{p_2}^{\min\{c_2, k_2\}}{p_3}^{\min\{c_3, k_3\}}...{p_n}^{\min\{c_n, k_n\}}\)

\(lcm(a,b) = {p_1}^{\max\{c_1, k_1\}}{p_2}^{\max\{c_2, k_2\}}{p_3}^{\max\{c_3, k_3\}}...{p_n}^{\max\{c_n, k_n\}}\)

若整数\(d\)含有质因数\(p\)
\(a,b,c,d,x\)的分解式中\(p\)的质数依次是\(m_a, m_b, m_c, m_d, m_x\)
那么\(m_c = \min\{m_a, m_x\}\)\(m_d = \max\{m_b, m_x\}\)
分情况讨论可得\(m_x\)的可能的取值的方案数。

我们找到d的所有的质因数p,那么p对应的方案数的乘积即为答案。
时间复杂度\(O(n\sqrt d/ \log d)\)

posted @ 2020-03-08 19:27  keik  阅读(89)  评论(0)    收藏  举报