类约瑟夫环问题

问题描述

聚会游戏:N 个人聚餐,编号从 1 到 N。从编号为 1 的人开始报数,报到M 的人喝一杯酒。下一个人再从 1 开始报数,如此循环往复。其中有一人非常讨厌喝酒,问他有没有机会不喝酒?他该如何做,为什么?


解答

​ 有机会。如果 N N N M M M 的最大公约数不为 1,就有机会。假设 K K K N N N M M M 的最小公倍数 ( l c m ) (lcm) (lcm),那么喝酒次数 K M \dfrac{K}{M} MK 次,会回到原点。因为 N M = g c d × l c m = g c d × k NM=gcd\times lcm=gcd\times k NM=gcd×lcm=gcd×k,如果 g c d = 1 gcd=1 gcd=1,那么 K M = N \dfrac{K}{M}=N MK=N,会把所有编号访问。


解析

​ 考虑从 1 1 1开始报数第一次回到 1 1 1的情况,假设一共有 a a a次循环,进行了 b b b轮。

即: a N = b M aN=bM aN=bM,因为要第一次回到 1 1 1,所以 a N aN aN要尽可能的小,所以 a N aN aN N , M N,M N,M的最小公倍数是最优的, l c m ( N , M ) = a N lcm(N,M)=aN lcm(N,M)=aN

所以 a N = N × M g c d ( N , M ) = b M aN=\dfrac{N\times M}{gcd(N,M)}=bM aN=gcd(N,M)N×M=bM

即: N = b × g c d ( N , M ) N=b\times gcd(N,M) N=b×gcd(N,M)

g c d ( N , M ) = 1 gcd(N,M)=1 gcd(N,M)=1时,会有 N 1 = N \dfrac{N}{1}=N 1N=N个不同的人被喝酒,所有的人都会喝酒。

所以没有人没有机会不喝酒。

g c d ( N , M ) ≠ 1 gcd(N,M)\ne 1 gcd(N,M)=1时, b = N g c d ( N , M ) < N b=\dfrac{N}{gcd(N,M)}<N b=gcd(N,M)N<N,所以必定存在某一个人可以不喝酒。


​ 此问题与约瑟夫环问题十分类似,该问题是在约瑟夫环的问题上,不进行删除数字。