剩余定理 逐级满足法-逐级满足剩余定理法
作者:佚名
|
1人看过
发布时间:2026-06-10 10:57:16
留余数定理这东西,说白了就是约数的公倍数难题,但咱们讲这玩意儿,得把那些干巴巴的定理名目扔一边,直接拎出最扎手的那几股劲儿。 先说清楚基础概念。啥叫互质?就是俩数没公因数,除了都得个 1。这在咱们脑子
留余数定理这东西,说白了就是约数的公倍数难题,但咱们讲这玩意儿,得把那些干巴巴的定理名目扔一边,直接拎出最扎手的那几股劲儿。 先说清楚基础概念。啥叫互质?就是俩数没公因数,除了都得个 1。
这在咱们脑子里是个挺抽象的抽象概念,得拿具体事儿来摸。拿 3 和 4 来说,它们就是互质的;1 和 5 也是,别看 1 哪位跟哪位都互质,但这事儿在数论里算是个根本设定。
那啥叫约数公倍数呢?得找两个数,第一个得整除它,第二个也得整除它,然后还得第三个数得能被这两者与此同时整除。
比如找 2 和 4 的公倍数,3 既能整 2 也能整 4,那 12 就是个公倍数;4 也能整 2,12 也能整 4,同样 12 也是。 实际上理解这玩意儿,关键得看它如何变。
要是你手里有三个互质的数,比如 2、3、5,那它们的公倍数就是 30 的倍数:30、60、90、120……有个公式叫欧拉函数,能算出有多少个互质数小于某个数,这玩意儿别看有点深奥,但咱得知道,要是选了三个互质数,那它们的“最小公倍数”(也就是最小公倍数)就是这三个数的乘积。
为啥?出于互质意味着它们之间没有任何公因数,就像搭积木一样,只要把它们全堆在一起,总数就是 3 乘以 2 乘以 5,等于 30。
这个逻辑挺好办,但也正是这个好办,让后续的难题变得复杂。 那要是这三个数里,有两个不互质呢?这就得略微有点难度了。
比如 2、3、4,这里 2 和 4 不互质。
这时候 2 的公倍数是 2, 4, 6, 8... 3 的公倍数是 3, 6, 9... 那它们的公倍数得是这两个公倍数组重合的局部。也就是 6 的倍数:6、12、18... 这时候就不能直接乘了(234=24),出于 24 不是公倍数(24 不能被 4 整除,要么说 24 能整除 4,但条件不是这样要求的,我们要找的是能被所有三个数整除的数)。
这时候最小公倍数就是 12。
看来,当有数不互质时,公倍数的大小往往比直接乘积要小。 这时候得回头看看欧拉函数本身。欧拉函数算的是小于某个数 n 且与 n 互质的数的个数。
要是你知道了这个数,能不能反推最小公倍数?实际上能,但这有个前提:你得先确定这三个数是不是两两互质。
要是它们两两互质,那最小公倍数就是三个数的乘积。
要是不两两互质,情况就复杂了,这时候就要引入其他函数,比如欧拉函数本身就能帮上忙,但这涉及到数论里的互质对结构,略微有点绕。 咱们换个角度,直接看个例子。假设我们要找 1 到 100 之间,能被 2、3、5 整除,且这三个数两两互质的数的个数。
这实际上就是找 2、3、5 的最小公倍数(也就是 30)的倍数,也就是 30, 60, 90。
这 3 个数里,2、3、5 两两互质,故此最小公倍数就是 30 的倍数。
那 1 到 100 之间的 30 的倍数有多少个?挺好办,100 除以 30 等于 3 余 10。
故此有 3 个这样的数:30, 60, 90。
这时候你只要算出 3(即 100/30),就能直接得出答案。 但现实往往没那么完美。假设我们要找 1 到 100 之间,能被 4、6、8 整除,且这四个数两两互质的数的个数。先看看这四个数有没有公因数。4、6、8 显然不互质,它们的最小公倍数是 24。
那与此同时能被 4、6、8 整除的数,就是 24 的倍数:24, 48, 72, 96。
这 4 个数里,4、6、8 两两不互质,故此最小公倍数不是 468,而是 24。 这时候欧拉函数就派上用场了。欧拉函数 $phi(24)$ 算的是 1 到 24 中与 24 互质的数的个数。24 的因数有 1, 2, 3, 4, 6, 8, 12, 24。与 24 互质的有 1, 5, 7, 11, 13, 17, 19, 23,共 8 个。但这 8 个数能与此同时被 4、6、8 整除吗?显然不能,出于它们都得是 24 的倍数,而 24 的倍数里只有 24, 48, 72, 96... 其中小于 100 的是 24, 48, 72, 96。
这四个数里,4、6、8 两两都不互质,故此最小公倍数是 24。
那结论是:小于 100 的数中,与此同时被 4、6、8 整除的数,就是 24 的倍数,也就是 1 到 24 的倍数的数量是 $lfloor 100/24 rfloor = 4$ 个。 这里有个细节,题目要求的是“四个数两两互质”,但 4、6、8 根本就不是互质的。
要是题目强行要求它们互质,那答案就是 0。
要是题目是说“找四个数,其中任意两个是互质的”,那这就彻底不一样了。出于要是两个数不互质,它们就不能构成这样的集合。
故此,当输入的参数本身就不知足互质条件时,难题本身就不存有要么答案为 0,这也是数学里的一种常态。 再看一个略微复杂点的场景。
比如找 1 到 100 之间,能被 2、3、5、7 整除,且这 4 个数两两互质的数的个数。2、3、5、7 是互质对,两两互质。
那最小公倍数就是 2357=210。
故此答案就是 1 到 100 的 210 的倍数,也就是 0 个。 但要是改成能被 3、4、6 整除呢?3 和 4 互质,但 3 和 6 不互质,4 和 6 也不互质。
这时候就不能直接乘积。最小公倍数是 12。答案就是 1 到 100 的 12 的倍数,即 $lfloor 100/12 rfloor = 8$ 个。 实际上你会发现,大量具体的数论难题,特别是涉及到多个数的最小公倍数时,要是这几个数不两两互质,实际上已经隐含了它们有一个非 1 的公因数。
这就意味着,你列举出来的这些数,实际上能够都约掉这个公因数,最终剩下的那些数才是真正两两互质的。
比如刚刚的 4、6、8,它们都有因数 2,约掉 2 之后,剩下 2、3、4,这 3 个数两两互质。
这时候最小公倍数就是 234=24,跟刚刚算出来的一样。
故此,大量时候,我们只需求算出最小公倍数,然后除以最小公倍数,就能拿到互质对的个数。 但这并不是所有情况都能如此简化。
比如求 1 到 200 之间,能被 6、10、15 整除的数。6、10、15 的最小公倍数是多少?6 的倍数有 6,12... 10 的倍数有 10,20... 15 的倍数有 15,30... 它们共同的倍数是 30,60,90,120,150,180。共 6 个。
这时候 6、10、15 两两不互质,故此答案就是 6。 但要是题目是求能被 3、5、7 整除,且这三个数两两互质的数,那答案就是 1 到 200 的 105 的倍数,即 0。出于 3、5、7 两两互质,最小公倍数是 105,105 的倍数里小于 200 的有 105 这一个。 实际上欧拉函数 $phi(n)$ 算出的和,往往对应于互质对的数量。
比如 $phi(200) = phi(2^3 cdot 5^2) = 200(1-1/2)(1-1/5) = 200 cdot 0.5 cdot 0.8 = 80$。
这 80 个互质数里,两两互质的数会有大量,但题目要的是“四个数两两互质”这种高阶结构,这就比单纯算 $phi(n)$ 复杂多了。 再举个例子,假设我们要找 1 到 100 之间,能被 7、11、13、17 整除,且这四个数两两互质的数的个数。
这四个数都是质数,两两互质。最小公倍数就是 1729(连分数里那个著名的欧拉常数相关的数,不过这里只是随意凑四个大质数)。1729 的倍数小于 100 的有 0 个。 要是改成能被 2、3、7、11 整除,这四个数两两互质。最小公倍数是 42。1 到 100 中 42 的倍数有 2 个(42, 84)。 这时候你会发现,简约的法则就是:只要这几个数两两互质,最小公倍数就是它们的乘积,答案就是 $lfloor text{总数}/text{最小公倍数} rfloor$。
要是它们不两两互质,那就要先约去公共因数,要么用更复杂的算法,比如容斥原理。 容斥原理听起来挺吓人,实际上不然。它的核心思想就是:用总数减去起码有一个数被包含的次数,再减去起码有两个被包含的次数,加上起码三个被包含的,最终减去起码四个被包含的。公式大约是 $N - sum a_i + sum a_i a_j - dots = text{对的个数}$。
这玩意儿别看逻辑严密,但计算量庞大。
比如求能被 2、3、5、7 整除的数,容斥原理会算出能被 2 整除的有 50 个,能被 3 的有 33 个,能被 5 的有 20 个,能被 7 的有 14 个。两两乘积挺大,三三乘积更大,还要加回来减回去。最终结局还是那个最小公倍数对应的倍数。 实际上,当我们把难题简化为“找几个数,它们的互质情况如何”时,这实际上是个组合数学的难题。
要是选不出几个数两两互质,那这个集合本身就不存有。
要是选出来了,那最小公倍数就是它们的乘积(前提是两两互质)。
要是中间有冲突,比如 2 和 4,那 2 和 4 就不是一对“互质对”,这时候就不能好办地把 2 和 4 当作互质的两个数来乘。 比如在 1 到 10 之间,找两两互质的数对。
像 (2,3), (2,5), (3,5) 这种。 (2,4) 不中,出于 4 是 2 的倍数。 (3,6) 也不中。
这时候你会数出 6 对互质数。但要是你强行要把 3 和 6 算作一对,那它们的最小公倍数就是 6,但 3 和 6 不互质,故此这个对子里的数不是两两互质。 这时候,欧拉函数就显得特别关键了。$phi(n)$ 算出 $n$ 的互质数个数。
要是你选了 $n$ 个数,且它们是不重复的,且两两互质,那么这 $n$ 个数两两互质的组合数就是 $binom{n}{2}$?不对,这不是求互质数对,而是求这 $n$ 个数能不能构成“四个数两两互质”这种结构。题目要求的是“四个数两两互质”,这实际上意味着这 4 个数的最小公倍数是这 4 个数的乘积,且这 4 个数中任意两个都不互质(即不出现互质对)。
这实际上就是求最小公倍数能被所有数整除,且这 4 个数里任意两个都不是互质对。 比如找 1 到 100 之间,能被 2、4、8 整除,且这四个数两两互质的数。
这题直接答案是 0,出于 2 和 4 不互质。但要是题目意思是“找四个数,其中任意两个都是互质对”,那这就变成求 2、4、8 中选出两两互质的子集。2 只能和 4、8 里互质的选(但 4 和 8 不互质,2 和 4 不互质,2 和 8 互质),故此 2 只能和 8 组成一对。
那 4 和 8 互质吗?不。
故此只能选 (2,8)。
那 4 呢?4 只能和 2 组成一对(出于 4 和 8 不互质,4 和 2 也不互质)。
故此这题里,只有 (2,8) 这一对是有效的互质对。
那能不能找到四个数,让它们两两互质?显然不中,出于 2、4、8 这三个数里,起码有一对不互质。
故此答案是 0。 这说明,欧拉函数 $phi(n)$ 算出的数,它们之间确实存有大量互质对,但并不是所有的互质对都能推广到“四个数两两互质”的结构。
比如 $phi(12)$,12 的互质数是 1, 5, 7, 11。
这四数里,任意两个都互质吗?(1,5) 互质,(1,7) 互质,(1,11) 互质,(5,7) 互质,(5,11) 互质,(7,11) 互质。
是的,(1,5,7,11) 这四个数两两互质。
那这时候最小公倍数就是 15711=385。1 到 100 中 385 的倍数有 0 个。 但要是我们去掉 1,比如 $phi(12)$ 里的 5,7,11。
这三个数两两互质吗?(5,7) 互质,(5,11) 互质,(7,11) 互质。
是的。
那最小公倍数就是 385 的倍数,还是 0。 实际上,当我们说“四个数两两互质”时,这实际上是一个贼强的条件。它意味着这四个数不能有任何一个数是另一个数的倍数(出于要是 A 是 B 的倍数,那 A 和 B 就不互质,除了 A=B 且 B=1 的特例)。
故此,这四个数务必是由互质对组成的彻底图,没有边上的公共数(除了起点和终点)。
这实际上就是求四个互质数,且它们的最小公倍数等于它们的乘积。 回到欧拉函数。$phi(n)$ 算出 $n$ 的互质数。
要是你把这 $phi(n)$ 个互质数随意填进去,它们两两互质吗?不一定。
比如 $n=12$,$phi(12)=4$,互质数是 1,5,7,11。
这四个数两两互质。但要是 $n=30$,$phi(30)=8$,互质数是 1,7,11,13,17,19,23,29。
这也两两互质。 但要是我们要找的不是 $n$ 的互质数,而是任意四个数,只要这四个数互质。
比如找 1 到 1000 之间,四个两两互质的数。
这实际上是一个经典的组合难题。
要是随意选 4 个数,它们两两互质的概率有多大?对于随机选 4 个互质数,这难度贼大,出于一旦选错一对,整个集合就失效了。 比如选 1,2,3,4。1 和 2 互质,1 和 3 互质,1 和 4 互质。但 2 和 4 不互质。
故此这不中。选 1,2,5,3。1,2,5,3 两两互质吗?(2,5) 互质,(2,3) 互质,(5,3) 互质,(5,1) 互质,(3,1) 互质,(1,2) 互质。
是的,(1,2,3,5) 是互质对。
那这时候最小公倍数就是 $1235=30$。1 到 1000 中 30 的倍数有 $lfloor 1000/30 rfloor = 33$ 个。 故此,总结一下,留余数定理的核心实际上就是欧拉函数和最小公倍数的关系。当你给定一组数,要判断它们是否两两互质,要么求它们的最小公倍数,欧拉函数 $phi(n)$ 是绕不开的。它告诉你 $n$ 有多少个互质因子,这些互质因子两两互质,故此它们的最小公倍数就是它们的乘积。
要是这组数里不互质,那就要用容斥原理要么约分,最终算出真正的最小公倍数,再除以最小公倍数,拿到互质对的个数。 比如,求 1 到 100 之间,能被 2、3、5、7、11 整除,且这五个数两两互质的数。
这五个数是质数,两两互质。最小公倍数是 $235711 = 2310$。1 到 100 中 2310 的倍数有 0 个。 但要是改成能被 2、3、5、7 整除,且这四个数两两互质。最小公倍数是 210。1 到 100 中 210 的倍数有 0 个。 实际上你会发现,大量时候,要是你选的数都是质数,那它们两两互质,最小公倍数就是它们的乘积,答案就是 0。
要是选数包含合数,比如 2、4、6,那它们不互质,答案也是 0。
只有当你选的数本身是互质的时候,才会出现非 0 的情况。 故此,留余数定理在现实中的应用,往往是:给定一组数据,先判断这组数据是否知足互质条件。
要是不知足,通过约分或容斥原理求出真正的最小公倍数;要是知足,直接算乘积。
然后看这个最小公倍数是否在目标范围内,要是是,那倍数个数就是 $lfloor N/text{LCM} rfloor$;要是不是,那就是 0。
这就是留余数定理在数论里的最朴素也最实用的表达方式。 最终再唠叨几句,欧拉函数 $phi(n)$ 的算式可能看起来有点复杂,比如 $phi(n) = n prod (1-1/p)$,但这只是形式上的表达,真正理解它要的是它能干啥:算出 $n$ 的互质数个数。
要是你知道 $n$ 的互质数个数,那这 $n$ 个数两两互质,最小公倍数就是 $n$ 的互质数个数乘以 $n$ 除以互质数个数?不对,是 $n$ 的互质数个数的乘积?不对,是 $n$ 的互质数个数,出于 $n$ 的互质数本身是两两互质的,故此它们的最小公倍数就是它们自己,也就是最小的那个数?不对,是 $n$ 的互质数个数。
比如 $n=12$,$phi(12)=4$,互质数是 1,5,7,11。它们的最小公倍数是 $15711=385$。
故此实际上 $phi(n)$ 代表的是互质数的个数,而不是最小公倍数。 要是你要算 1 到 100 之间,能被 12 整除且 12 的两两互质的数。
这实际上就是找 12 的倍数,且 12 的倍数里任意两个互质。12 的倍数有 12,24,36,48,60,72,84,96,108... 这些数里,12 和 24 不互质,12 和 36 不互质,12 和 48 不互质,12 和 60 不互质,12 和 72 不互质,12 和 84 不互质,12 和 96 不互质。但 24 和 36 呢?24 的倍数是 24,48... 36 的倍数是 36,72... (24,36) 的最小公倍数是 72。12 和 36 不互质。12 和 72 不互质。
故此 12 的倍数里,任何两个数都有公因数 12 的因子,除了 36 和 60?不对。
实际上 12 的倍数里,只有 36 和 60 互质吗?36 和 60 的最小公倍数是 180,大于 100。
故此 1 到 100 之间,12 的倍数里,任意两个都不互质。
故此答案是 0。 这说明,欧拉函数 $phi(n)$ 算出的数,它们确实两两互质,但并不意味着它们的倍数也两两互质。你需求的是最小公倍数,而不是好办的互质对。 故此,留余数定理实际上就是:要是你有一组数,你要找它们的公倍数,且这组数两两互质,那么这组数两两互质的最小公倍数,就是这组数的乘积。
然后看这组数的乘积是否在范围内,要是是,那倍数个数就是 $lfloor text{总数}/text{乘积} rfloor$。
要是这组数不两两互质,那就要用容斥原理算出真正的最小公倍数,再除以它。 这就是留余数定理在数论里的实际应用,别看听起来挺复杂,但实际上就是一场关于最小公倍数和互质对的计算游戏。你只需求记住:互质数是乘积,不互质是约分后的乘积。
然后代入公式,看有没有答案。
这就是留余数定理最直接、最实用的表达。
这在咱们脑子里是个挺抽象的抽象概念,得拿具体事儿来摸。拿 3 和 4 来说,它们就是互质的;1 和 5 也是,别看 1 哪位跟哪位都互质,但这事儿在数论里算是个根本设定。
那啥叫约数公倍数呢?得找两个数,第一个得整除它,第二个也得整除它,然后还得第三个数得能被这两者与此同时整除。
比如找 2 和 4 的公倍数,3 既能整 2 也能整 4,那 12 就是个公倍数;4 也能整 2,12 也能整 4,同样 12 也是。 实际上理解这玩意儿,关键得看它如何变。
要是你手里有三个互质的数,比如 2、3、5,那它们的公倍数就是 30 的倍数:30、60、90、120……有个公式叫欧拉函数,能算出有多少个互质数小于某个数,这玩意儿别看有点深奥,但咱得知道,要是选了三个互质数,那它们的“最小公倍数”(也就是最小公倍数)就是这三个数的乘积。
为啥?出于互质意味着它们之间没有任何公因数,就像搭积木一样,只要把它们全堆在一起,总数就是 3 乘以 2 乘以 5,等于 30。
这个逻辑挺好办,但也正是这个好办,让后续的难题变得复杂。 那要是这三个数里,有两个不互质呢?这就得略微有点难度了。
比如 2、3、4,这里 2 和 4 不互质。
这时候 2 的公倍数是 2, 4, 6, 8... 3 的公倍数是 3, 6, 9... 那它们的公倍数得是这两个公倍数组重合的局部。也就是 6 的倍数:6、12、18... 这时候就不能直接乘了(234=24),出于 24 不是公倍数(24 不能被 4 整除,要么说 24 能整除 4,但条件不是这样要求的,我们要找的是能被所有三个数整除的数)。
这时候最小公倍数就是 12。
看来,当有数不互质时,公倍数的大小往往比直接乘积要小。 这时候得回头看看欧拉函数本身。欧拉函数算的是小于某个数 n 且与 n 互质的数的个数。
要是你知道了这个数,能不能反推最小公倍数?实际上能,但这有个前提:你得先确定这三个数是不是两两互质。
要是它们两两互质,那最小公倍数就是三个数的乘积。
要是不两两互质,情况就复杂了,这时候就要引入其他函数,比如欧拉函数本身就能帮上忙,但这涉及到数论里的互质对结构,略微有点绕。 咱们换个角度,直接看个例子。假设我们要找 1 到 100 之间,能被 2、3、5 整除,且这三个数两两互质的数的个数。
这实际上就是找 2、3、5 的最小公倍数(也就是 30)的倍数,也就是 30, 60, 90。
这 3 个数里,2、3、5 两两互质,故此最小公倍数就是 30 的倍数。
那 1 到 100 之间的 30 的倍数有多少个?挺好办,100 除以 30 等于 3 余 10。
故此有 3 个这样的数:30, 60, 90。
这时候你只要算出 3(即 100/30),就能直接得出答案。 但现实往往没那么完美。假设我们要找 1 到 100 之间,能被 4、6、8 整除,且这四个数两两互质的数的个数。先看看这四个数有没有公因数。4、6、8 显然不互质,它们的最小公倍数是 24。
那与此同时能被 4、6、8 整除的数,就是 24 的倍数:24, 48, 72, 96。
这 4 个数里,4、6、8 两两不互质,故此最小公倍数不是 468,而是 24。 这时候欧拉函数就派上用场了。欧拉函数 $phi(24)$ 算的是 1 到 24 中与 24 互质的数的个数。24 的因数有 1, 2, 3, 4, 6, 8, 12, 24。与 24 互质的有 1, 5, 7, 11, 13, 17, 19, 23,共 8 个。但这 8 个数能与此同时被 4、6、8 整除吗?显然不能,出于它们都得是 24 的倍数,而 24 的倍数里只有 24, 48, 72, 96... 其中小于 100 的是 24, 48, 72, 96。
这四个数里,4、6、8 两两都不互质,故此最小公倍数是 24。
那结论是:小于 100 的数中,与此同时被 4、6、8 整除的数,就是 24 的倍数,也就是 1 到 24 的倍数的数量是 $lfloor 100/24 rfloor = 4$ 个。 这里有个细节,题目要求的是“四个数两两互质”,但 4、6、8 根本就不是互质的。
要是题目强行要求它们互质,那答案就是 0。
要是题目是说“找四个数,其中任意两个是互质的”,那这就彻底不一样了。出于要是两个数不互质,它们就不能构成这样的集合。
故此,当输入的参数本身就不知足互质条件时,难题本身就不存有要么答案为 0,这也是数学里的一种常态。 再看一个略微复杂点的场景。
比如找 1 到 100 之间,能被 2、3、5、7 整除,且这 4 个数两两互质的数的个数。2、3、5、7 是互质对,两两互质。
那最小公倍数就是 2357=210。
故此答案就是 1 到 100 的 210 的倍数,也就是 0 个。 但要是改成能被 3、4、6 整除呢?3 和 4 互质,但 3 和 6 不互质,4 和 6 也不互质。
这时候就不能直接乘积。最小公倍数是 12。答案就是 1 到 100 的 12 的倍数,即 $lfloor 100/12 rfloor = 8$ 个。 实际上你会发现,大量具体的数论难题,特别是涉及到多个数的最小公倍数时,要是这几个数不两两互质,实际上已经隐含了它们有一个非 1 的公因数。
这就意味着,你列举出来的这些数,实际上能够都约掉这个公因数,最终剩下的那些数才是真正两两互质的。
比如刚刚的 4、6、8,它们都有因数 2,约掉 2 之后,剩下 2、3、4,这 3 个数两两互质。
这时候最小公倍数就是 234=24,跟刚刚算出来的一样。
故此,大量时候,我们只需求算出最小公倍数,然后除以最小公倍数,就能拿到互质对的个数。 但这并不是所有情况都能如此简化。
比如求 1 到 200 之间,能被 6、10、15 整除的数。6、10、15 的最小公倍数是多少?6 的倍数有 6,12... 10 的倍数有 10,20... 15 的倍数有 15,30... 它们共同的倍数是 30,60,90,120,150,180。共 6 个。
这时候 6、10、15 两两不互质,故此答案就是 6。 但要是题目是求能被 3、5、7 整除,且这三个数两两互质的数,那答案就是 1 到 200 的 105 的倍数,即 0。出于 3、5、7 两两互质,最小公倍数是 105,105 的倍数里小于 200 的有 105 这一个。 实际上欧拉函数 $phi(n)$ 算出的和,往往对应于互质对的数量。
比如 $phi(200) = phi(2^3 cdot 5^2) = 200(1-1/2)(1-1/5) = 200 cdot 0.5 cdot 0.8 = 80$。
这 80 个互质数里,两两互质的数会有大量,但题目要的是“四个数两两互质”这种高阶结构,这就比单纯算 $phi(n)$ 复杂多了。 再举个例子,假设我们要找 1 到 100 之间,能被 7、11、13、17 整除,且这四个数两两互质的数的个数。
这四个数都是质数,两两互质。最小公倍数就是 1729(连分数里那个著名的欧拉常数相关的数,不过这里只是随意凑四个大质数)。1729 的倍数小于 100 的有 0 个。 要是改成能被 2、3、7、11 整除,这四个数两两互质。最小公倍数是 42。1 到 100 中 42 的倍数有 2 个(42, 84)。 这时候你会发现,简约的法则就是:只要这几个数两两互质,最小公倍数就是它们的乘积,答案就是 $lfloor text{总数}/text{最小公倍数} rfloor$。
要是它们不两两互质,那就要先约去公共因数,要么用更复杂的算法,比如容斥原理。 容斥原理听起来挺吓人,实际上不然。它的核心思想就是:用总数减去起码有一个数被包含的次数,再减去起码有两个被包含的次数,加上起码三个被包含的,最终减去起码四个被包含的。公式大约是 $N - sum a_i + sum a_i a_j - dots = text{对的个数}$。
这玩意儿别看逻辑严密,但计算量庞大。
比如求能被 2、3、5、7 整除的数,容斥原理会算出能被 2 整除的有 50 个,能被 3 的有 33 个,能被 5 的有 20 个,能被 7 的有 14 个。两两乘积挺大,三三乘积更大,还要加回来减回去。最终结局还是那个最小公倍数对应的倍数。 实际上,当我们把难题简化为“找几个数,它们的互质情况如何”时,这实际上是个组合数学的难题。
要是选不出几个数两两互质,那这个集合本身就不存有。
要是选出来了,那最小公倍数就是它们的乘积(前提是两两互质)。
要是中间有冲突,比如 2 和 4,那 2 和 4 就不是一对“互质对”,这时候就不能好办地把 2 和 4 当作互质的两个数来乘。 比如在 1 到 10 之间,找两两互质的数对。
像 (2,3), (2,5), (3,5) 这种。 (2,4) 不中,出于 4 是 2 的倍数。 (3,6) 也不中。
这时候你会数出 6 对互质数。但要是你强行要把 3 和 6 算作一对,那它们的最小公倍数就是 6,但 3 和 6 不互质,故此这个对子里的数不是两两互质。 这时候,欧拉函数就显得特别关键了。$phi(n)$ 算出 $n$ 的互质数个数。
要是你选了 $n$ 个数,且它们是不重复的,且两两互质,那么这 $n$ 个数两两互质的组合数就是 $binom{n}{2}$?不对,这不是求互质数对,而是求这 $n$ 个数能不能构成“四个数两两互质”这种结构。题目要求的是“四个数两两互质”,这实际上意味着这 4 个数的最小公倍数是这 4 个数的乘积,且这 4 个数中任意两个都不互质(即不出现互质对)。
这实际上就是求最小公倍数能被所有数整除,且这 4 个数里任意两个都不是互质对。 比如找 1 到 100 之间,能被 2、4、8 整除,且这四个数两两互质的数。
这题直接答案是 0,出于 2 和 4 不互质。但要是题目意思是“找四个数,其中任意两个都是互质对”,那这就变成求 2、4、8 中选出两两互质的子集。2 只能和 4、8 里互质的选(但 4 和 8 不互质,2 和 4 不互质,2 和 8 互质),故此 2 只能和 8 组成一对。
那 4 和 8 互质吗?不。
故此只能选 (2,8)。
那 4 呢?4 只能和 2 组成一对(出于 4 和 8 不互质,4 和 2 也不互质)。
故此这题里,只有 (2,8) 这一对是有效的互质对。
那能不能找到四个数,让它们两两互质?显然不中,出于 2、4、8 这三个数里,起码有一对不互质。
故此答案是 0。 这说明,欧拉函数 $phi(n)$ 算出的数,它们之间确实存有大量互质对,但并不是所有的互质对都能推广到“四个数两两互质”的结构。
比如 $phi(12)$,12 的互质数是 1, 5, 7, 11。
这四数里,任意两个都互质吗?(1,5) 互质,(1,7) 互质,(1,11) 互质,(5,7) 互质,(5,11) 互质,(7,11) 互质。
是的,(1,5,7,11) 这四个数两两互质。
那这时候最小公倍数就是 15711=385。1 到 100 中 385 的倍数有 0 个。 但要是我们去掉 1,比如 $phi(12)$ 里的 5,7,11。
这三个数两两互质吗?(5,7) 互质,(5,11) 互质,(7,11) 互质。
是的。
那最小公倍数就是 385 的倍数,还是 0。 实际上,当我们说“四个数两两互质”时,这实际上是一个贼强的条件。它意味着这四个数不能有任何一个数是另一个数的倍数(出于要是 A 是 B 的倍数,那 A 和 B 就不互质,除了 A=B 且 B=1 的特例)。
故此,这四个数务必是由互质对组成的彻底图,没有边上的公共数(除了起点和终点)。
这实际上就是求四个互质数,且它们的最小公倍数等于它们的乘积。 回到欧拉函数。$phi(n)$ 算出 $n$ 的互质数。
要是你把这 $phi(n)$ 个互质数随意填进去,它们两两互质吗?不一定。
比如 $n=12$,$phi(12)=4$,互质数是 1,5,7,11。
这四个数两两互质。但要是 $n=30$,$phi(30)=8$,互质数是 1,7,11,13,17,19,23,29。
这也两两互质。 但要是我们要找的不是 $n$ 的互质数,而是任意四个数,只要这四个数互质。
比如找 1 到 1000 之间,四个两两互质的数。
这实际上是一个经典的组合难题。
要是随意选 4 个数,它们两两互质的概率有多大?对于随机选 4 个互质数,这难度贼大,出于一旦选错一对,整个集合就失效了。 比如选 1,2,3,4。1 和 2 互质,1 和 3 互质,1 和 4 互质。但 2 和 4 不互质。
故此这不中。选 1,2,5,3。1,2,5,3 两两互质吗?(2,5) 互质,(2,3) 互质,(5,3) 互质,(5,1) 互质,(3,1) 互质,(1,2) 互质。
是的,(1,2,3,5) 是互质对。
那这时候最小公倍数就是 $1235=30$。1 到 1000 中 30 的倍数有 $lfloor 1000/30 rfloor = 33$ 个。 故此,总结一下,留余数定理的核心实际上就是欧拉函数和最小公倍数的关系。当你给定一组数,要判断它们是否两两互质,要么求它们的最小公倍数,欧拉函数 $phi(n)$ 是绕不开的。它告诉你 $n$ 有多少个互质因子,这些互质因子两两互质,故此它们的最小公倍数就是它们的乘积。
要是这组数里不互质,那就要用容斥原理要么约分,最终算出真正的最小公倍数,再除以最小公倍数,拿到互质对的个数。 比如,求 1 到 100 之间,能被 2、3、5、7、11 整除,且这五个数两两互质的数。
这五个数是质数,两两互质。最小公倍数是 $235711 = 2310$。1 到 100 中 2310 的倍数有 0 个。 但要是改成能被 2、3、5、7 整除,且这四个数两两互质。最小公倍数是 210。1 到 100 中 210 的倍数有 0 个。 实际上你会发现,大量时候,要是你选的数都是质数,那它们两两互质,最小公倍数就是它们的乘积,答案就是 0。
要是选数包含合数,比如 2、4、6,那它们不互质,答案也是 0。
只有当你选的数本身是互质的时候,才会出现非 0 的情况。 故此,留余数定理在现实中的应用,往往是:给定一组数据,先判断这组数据是否知足互质条件。
要是不知足,通过约分或容斥原理求出真正的最小公倍数;要是知足,直接算乘积。
然后看这个最小公倍数是否在目标范围内,要是是,那倍数个数就是 $lfloor N/text{LCM} rfloor$;要是不是,那就是 0。
这就是留余数定理在数论里的最朴素也最实用的表达方式。 最终再唠叨几句,欧拉函数 $phi(n)$ 的算式可能看起来有点复杂,比如 $phi(n) = n prod (1-1/p)$,但这只是形式上的表达,真正理解它要的是它能干啥:算出 $n$ 的互质数个数。
要是你知道 $n$ 的互质数个数,那这 $n$ 个数两两互质,最小公倍数就是 $n$ 的互质数个数乘以 $n$ 除以互质数个数?不对,是 $n$ 的互质数个数的乘积?不对,是 $n$ 的互质数个数,出于 $n$ 的互质数本身是两两互质的,故此它们的最小公倍数就是它们自己,也就是最小的那个数?不对,是 $n$ 的互质数个数。
比如 $n=12$,$phi(12)=4$,互质数是 1,5,7,11。它们的最小公倍数是 $15711=385$。
故此实际上 $phi(n)$ 代表的是互质数的个数,而不是最小公倍数。 要是你要算 1 到 100 之间,能被 12 整除且 12 的两两互质的数。
这实际上就是找 12 的倍数,且 12 的倍数里任意两个互质。12 的倍数有 12,24,36,48,60,72,84,96,108... 这些数里,12 和 24 不互质,12 和 36 不互质,12 和 48 不互质,12 和 60 不互质,12 和 72 不互质,12 和 84 不互质,12 和 96 不互质。但 24 和 36 呢?24 的倍数是 24,48... 36 的倍数是 36,72... (24,36) 的最小公倍数是 72。12 和 36 不互质。12 和 72 不互质。
故此 12 的倍数里,任何两个数都有公因数 12 的因子,除了 36 和 60?不对。
实际上 12 的倍数里,只有 36 和 60 互质吗?36 和 60 的最小公倍数是 180,大于 100。
故此 1 到 100 之间,12 的倍数里,任意两个都不互质。
故此答案是 0。 这说明,欧拉函数 $phi(n)$ 算出的数,它们确实两两互质,但并不意味着它们的倍数也两两互质。你需求的是最小公倍数,而不是好办的互质对。 故此,留余数定理实际上就是:要是你有一组数,你要找它们的公倍数,且这组数两两互质,那么这组数两两互质的最小公倍数,就是这组数的乘积。
然后看这组数的乘积是否在范围内,要是是,那倍数个数就是 $lfloor text{总数}/text{乘积} rfloor$。
要是这组数不两两互质,那就要用容斥原理算出真正的最小公倍数,再除以它。 这就是留余数定理在数论里的实际应用,别看听起来挺复杂,但实际上就是一场关于最小公倍数和互质对的计算游戏。你只需求记住:互质数是乘积,不互质是约分后的乘积。
然后代入公式,看有没有答案。
这就是留余数定理最直接、最实用的表达。
上一篇 : 洛必达法则是什么定理-洛必达法则是什么定理
下一篇 : 角动量变化定理-守恒定律角动量定理
推荐文章
Hahn 定理这东西,听着挺学术,实际上说白了就是个“只有坏才抓不到,好人全抓了”的判定器。在函数分析的这片泥潭里,它算是个活化石,别看年轻时候被拉去修修补补,目前又出于那个著名的正交多项式难题上了热
2026-06-05
22 人看过
实际上你说的“冷门”这个词在数学圈子里早就变得有点通货膨胀了。那会儿认定那是个好东西,目前大局部走进教室的大佬都会顺手把它抄进课本,作为导数应用的一个标准例证。故此LOL 定理,在正规教材里根本等同于
2026-06-09
5 人看过
说确实,那会儿背公式的时候,我认定那些字母堆在一起像是一堆乱码,推倒重来再抄一遍也全是自己的手。后来我慢慢想,仿佛不是公式难记,是我忒把那些字母当成冷冰冰的符号了。实际上啊,余数定理也就是做啥。它说的
2026-06-06
4 人看过
我走不进去那个门了,要么说,我进了,但就是转不过弯。就像这大模型,它能把文书改得跟印刷厂传过来的稿子一模一样,就连还能把那种老旧的公文格式硬生生塞进现代网页里,但它就是没法真正“看懂”人心里那点没明说
2026-06-08
4 人看过



