【基础数学二】整除,最大公约数约数,最小公倍数

整除

在数论中,一个整数 aaa 能够被另一个整数 ddd 整除,记做 d∣ad|ada

整除的性质:

  • 如果 d∣ad | ada,则对于任意整数 kkkd∣kad | kadka
  • 如果 d∣ad|ada 并且 d∣bd|bdb ,则 d∣(a±b)d | (a ± b)d(a±b)
  • 如果 b∣ab | aba并且 a∣ba | bab,则 a=ba = ba=b

约数&倍数

若整数ddd能整除整数aaa(记为d∣ad|ada)且d>0d>0d>0,则称dddaaa约数(Divisor)。一个整数aaa的约数最小为111,最大为∣a∣|a|a,比如202020的约数有111222444555101010202020

d∣ad|ada,则称aaaddd倍数(Multiple)。即存在整数kkk,使得a=kda = kda=kd,例如202020111222444555101010202020的倍数。

公约数&最大公约数

如果 dddaaa 的约数也是 bbb 的约数,则 dddaaabbb公约数

最大公约数顾名思义就是,所有公约数中最大的那个。

一般地,将 aaabbb 的最大公约数记为 gcd(a,b)gcd(a, b)gcd(a,b)

举个例子,gcd(15,20)=5gcd(15, 20) = 5gcd(15,20)=5gcd(1,20)=1gcd(1, 20) = 1gcd(1,20)=1, $gcd(0, 20) = 20 $。

需要特别注意,gcd(0,0)=0gcd(0, 0) = 0gcd(0,0)=0

最大公约数具有以下性质:

  1. gcd(a,ka)=∣a∣gcd(a, ka) = |a|gcd(a,ka)=a
  2. 对于任意整数 aaabbb,如果d∣ad | adad∣bd | bdb,则 d∣gcd(a,b)d | gcd(a, b)dgcd(a,b)
  3. 对所有整数 aaabbb 以及任意非负整数 nnngcd(an,bn)=ngcd(a,b)gcd(an, bn) = n gcd(a, b)gcd(an,bn)=ngcd(a,b)
  4. 对所有正整数 dddaaabbb,如果 d∣abd | abdab 并且 gcd(a,b)=1gcd(a, b) = 1gcd(a,b)=1,则 d∣bd | bdb
  5. 如果 qqqrrraaa 除以 bbb 的商和余数,即 a=b∗q+ra = b * q + ra=bq+r,则 gcd(a,b)=gcd(b,r)gcd(a, b) = gcd(b, r)gcd(a,b)=gcd(b,r)

扩展:如果两个数字aaabbb满足gcd(a,b)=1gcd(a, b) = 1gcd(a,b)=1,我们成为aaabbb互质

证明

充分性

证明: gcd(a,b)gcd(a, b)gcd(a,b)aaabbb 的公约数,并且是最大的。

证明过程:

  1. 根据定义,gcd(a,b)gcd(a, b)gcd(a,b) 是能够同时整除 aaabbb 的最大的正整数。
  2. 因此,gcd(a,b)∣agcd(a, b) | agcd(a,b)agcd(a,b)∣bgcd(a, b) | bgcd(a,b)b,这表明 gcd(a,b)gcd(a, b)gcd(a,b)aaabbb 的公约数。
  3. 假设存在另一个公约数 d′>gcd(a,b)d' > gcd(a, b)d>gcd(a,b),这与 gcd(a,b)gcd(a, b)gcd(a,b) 的定义矛盾,因为 gcd(a,b)gcd(a, b)gcd(a,b) 被定义为最大的公约数。
  4. 因此,不存在比 gcd(a,b)gcd(a, b)gcd(a,b) 更大的公约数。

故得证 gcd(a,b)gcd(a, b)gcd(a,b) 是最大的公约数。

必要性

证明: 如果存在一个正整数 dddaaabbb 的公约数,则 ddd 必然是 gcd(a,b)gcd(a, b)gcd(a,b) 的约数。

证明过程:

  1. 假设 dddaaabbb 的公约数,那么根据定义,d∣ad|adad∣bd|bdb
  2. 由于 gcd(a,b)gcd(a, b)gcd(a,b)aaabbb 的最大公约数,根据公约数的定义,任何 aaabbb 的公约数都必须小于或等于 gcd(a,b)gcd(a, b)gcd(a,b)
  3. 因此,d≤gcd(a,b)d ≤ gcd(a, b)dgcd(a,b)
  4. 如果假设 gcd(a,b)gcd(a, b)gcd(a,b) 不是 ddd 的倍数,则存在一个更小的正整数 d′>dd' > dd>d 能够同时整除 aaabbb,这与 gcd(a,b)gcd(a, b)gcd(a,b) 是最大公约数的定义矛盾。
  5. 因此,gcd(a,b)gcd(a, b)gcd(a,b) 必须是 ddd 的倍数,即 d∣gcd(a,b)d | gcd(a, b)dgcd(a,b)

公倍数&最小公倍数

如果 mmmaaa 的倍数并且也是 bbb 的倍数,则 mmmaaabbb公倍数

最小公倍数顾名思义,就是所有的公倍数中最小的那个。

一般地,将 aaabbb 最小公倍数记为 lcm(a,b)lcm(a, b)lcm(a,b)

举个例子,lcm(8,12)=24lcm(8, 12) = 24lcm(8,12)=24lcm(1,12)=12lcm(1, 12) = 12lcm(1,12)=12lcm(0,12)=0lcm(0, 12) = 0lcm(0,12)=0lcm(0,0)=0lcm(0, 0) = 0lcm(0,0)=0

最小公倍数的性质:

  • lcm(a,b)=a∗b/gcd(a,b)lcm(a, b) = a * b / gcd(a, b)lcm(a,b)=ab/gcd(a,b)

求最大公约数&最小公倍数

在编程时,我们一般使用 辗转相除法 来求两个数的最大公约数,也就是直接利用第五个性质。

如果 qqqrrraaa 除以 bbb 的商和余数,即 a=b∗q+ra = b * q + ra=bq+r,则 gcd(a,b)=gcd(b,r)gcd(a, b) = gcd(b, r)gcd(a,b)=gcd(b,r)

举个例子:
gcd(1001,767)gcd(1001,767)gcd(1001,767)
=gcd(767,234)=gcd(767,234)=gcd(767,234)
=gcd(234,65)=gcd(234,65)=gcd(234,65)
=gcd(65,39)=gcd(65,39)=gcd(65,39)
=gcd(39,26)=gcd(39,26)=gcd(39,26)
=gcd(13,0)=gcd(13,0)=gcd(13,0)
=gcd(26,13)=gcd(26,13)=gcd(26,13)
=13=13=13

求最大公约数:

// 辗转相除法求最大公约数
int gcd(int a, int b) {
	return !b ? a : gcd(b, a % b);
}

求最小公倍数:

// 利用最大公约数求最小公倍数
int lcm(int a, int b) {
    return a * b == 0 ? 0 : a * b / gcd(a, b);
}

abmod na^b mod\ nabmod n :

// 求 a mod n
int qmi(int a, int b, int n) {
    int t = 1;
    int y = a;
    while (b > 0) {
        if (b % 2 == 1)
            t = (t * y) % n;
        y = (y * y) % n;
        b /= 2;
    }
    return t;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值