[组合数学] 圆排列和欧拉函数为啥有关系:都是polya定理的锅
本文是一个笨比学习组合数学的学习笔记,因为是笨比,所以写的应该算是很通俗易懂了。
首先,我们考虑这么一个问题:你有无穷多的种颜色的珠子,现在你想要的把他们中的个以圆形的形状等间距的黏在一个可以旋转的圆盘上,求方案数。
然后,该问题的答案是 ,之中表示欧拉函数,下面解释一下为什么会出现这样一个公式。
首先,我们来复习一下polya定理:设一个序列上定义了一置换群,则对该序列做种颜色的染色,方案数为,之中,表示置换群大小(元素个数),表示中第个置换的循环节数目。
那么在上述圆排列问题中,置换群也就是旋转变换的群了,注意这里不考虑翻转变换(这也是为什么题目里说要黏在可旋转的圆盘上的原因,这样就和翻转变换无关了)。那么显然,一个有个珠子的圆环,一共对应了种旋转变换,分别是从转个单位到转个单位(也就是不转,或者说转0个单位)的种。因此,置换群大小。
把代入polya的公式里,得到,那么对比真正的答案,接下来要说明的就是,为什么。
答案其实简单的有些弱智:合并同类项
这一式子里,其实有项,那么很自然的一个想法就是:是不是有不少重复的呢?事实上,是的,甚至只有种不同的。
下面随便假设有个指数,那我想知道,有几个出现,也就是有几个。回忆一下,这里指的是第个置换循环节的数量,这个要怎么求呢?这里需要一个简单但nb的小知识:
定理:对于个珠子组成的圆的旋转变换来说,旋转了个单位的变换对应的循环节数量有个。
不是证明的证明:考虑一个青蛙跳石头的问题,也就是有块石头圆形排列,编号从至,青蛙初始在的位置,每次青蛙会跳x步,那么青蛙跳一步就相当于,现在,请问青蛙一直跳下去,能踩到多少块石头。例如,时,青蛙就只能跳到编号为的三块儿石头上。该问题的答案是,这个证明略了,这是个比较好理解但不太好表述的数论结论。
那么,如果我们把旋转个单位的置换群理解成每步跳格的青蛙的话,就有循环节长度 = 青蛙能跳到的石头个数 = 。又因为从青蛙的例子里可以看出,该长度和青蛙初始的无关,所以所有的循环节长度都是。
进而,由于 n=循环节长度*循环节数量,就可以解得循环节数量为,这就是旋转对应置换的循环节数量。
书归正传,我们现在想知道的是,给定一个整数,有几个出现在中,或者说多少个。的含义是循环节数量,也就是对于,有多少个对应的循环节数量是。废话不多说,按刚才的结论,这也就是问有多少个满足。
有多少个满足:这又是个数论问题,首先,变换成,这个变换是科学的,因为中和一定是的倍数。那么,有多少个满足呢?由于满足的狗有个(根据欧拉函数的定义),而狗和显然是一一对应的,所以这样的就也有个。
所以,,这里是因为根据上面推导,循环节数量显然一定是的因子。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现