类约瑟夫环问题
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类约瑟夫环问题相关的知识,希望对你有一定的参考价值。
类约瑟夫环问题
问题描述
聚会游戏: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,所以必定存在某一个人可以不喝酒。
此问题与约瑟夫环问题十分类似,该问题是在约瑟夫环的问题上,不进行删除数字。
以上是关于类约瑟夫环问题的主要内容,如果未能解决你的问题,请参考以下文章