本文是一个笨比学习组合数学的学习笔记,因为是笨比,所以写的应该算是很通俗易懂了。

首先,我们考虑这么一个问题:你有无穷多的\(p\)种颜色的珠子,现在你想要的把他们中的\(n\)个以圆形的形状等间距的黏在一个可以旋转的圆盘上,求方案数。

然后,该问题的答案是 \(\frac{1}{n}\Sigma_{d|n}\phi(\frac{n}{d})p^d\) ,之中\(\phi()\)表示欧拉函数,下面解释一下为什么会出现这样一个数论函数。

首先,我们来复习一下polya定理:设一个序列上定义了一置换群\(|G|\),则对该序列做\(p\)种颜色的染色,方案数为\(\frac{1}{|G|}\Sigma^{|G|}_{i=1}p^{c_i}\),之中,\(|G|\)表示置换群大小(元素个数),\(c_i\)表示\(G\)中第\(i\)个置换的循环节数目。

那么在上述圆排列问题中,置换群也就是旋转变换的群了,注意这里不考虑翻转变换(这也是为什么题目里说要黏在可旋转的圆盘上的原因,这样就和翻转变换无关了)。那么显然,一个有\(n\)个珠子的圆环,一共对应了\(n\)种旋转变换,分别是从转\(1\)个单位到转\(n\)个单位(也就是不转,或者说转0个单位)的\(n\)种。因此,置换群大小\(|G|=n\)。

把\(|G|=n\)代入polya的公式里,得到\(ans=\frac{1}{n}\Sigma^{n}_{i=1}p^{c_i}\),那么对比真正的答案,接下来要说明的就是,为什么\(\Sigma^{n}_{i=1}p^{c_i}=\Sigma_{d|n}\phi(\frac{n}{d})p^d\)。

答案其实简单的有些弱智:合并同类项

\(\Sigma^{n}_{i=1}p^{c_i}\)这一式子里,其实有\(n\)项,那么很自然的一个想法就是:\(p^{c_i}\)是不是有不少重复的呢?事实上,是的,甚至只有\(\sqrt{n}\)种不同的\(p^{c_i}\)。

下面随便假设有个指数\(d\),那我想知道\(\Sigma^{n}_{i=1}p^{c_i}\),有几个\(p^d\)出现,也就是有几个\(c_i=d\)。回忆一下,这里\(c_i\)指的是第\(i\)个置换循环节的数量,这个要怎么求呢?这里需要一个简单但nb的小知识:

定理:对于\(n\)个珠子组成的圆的旋转变换来说,旋转了\(x\)个单位的变换对应的循环节数量有\(gcd(n,x)\)个,特别的,\(x=0\)时的循环节数量有\(n\)个。

不是证明的证明:考虑一个青蛙跳石头的问题,也就是有\(n\)块石头圆形排列,编号从\(0~n-1\),青蛙初始在\(pos\)的位置,每次青蛙会跳x步,那么青蛙跳一步就相当于\(pos=(pos+x)%k\),现在,请问青蛙一直跳下去,能踩到多少块石头。例如,\(n=6,x=4,pos=2\)时,青蛙就只能跳到编号为\(0,2,4\)的三块儿石头上。该问题的答案是\(\frac{n}{gcd(n,x)}\),这个证明略了,这是个比较好理解但不太好表述的数论结论。

那么,如果我们把旋转\(x\)个单位的置换群理解成每步跳\(x\)格的青蛙的话,就有循环节长度 = 青蛙能跳到的石头个数 = \(\frac{n}{gcd(n,x)}\) 。又因为从青蛙的例子里可以看出,该长度和青蛙初始的\(pos\)无关,所以所有的循环节长度都是\(\frac{n}{gcd(n,x)}\)。

进而,由于 n=循环节长度*循环节数量,就可以解得循环节数量为\(gcd(n,x)\),这就是旋转\(x\)对应置换的循环节数量。

书归正传,我们现在想知道的是,给定一个整数\(d\),有几个\(p^d\)出现在\(\Sigma^{n}_{i=1}p^{c_i}\)中,或者说多少个\(c_i=d\)。\(c_i\)的含义是循环节数量,也就是对于\(x\in [1,n]\),有多少个\(x\)对应的循环节数量是\(d\)。废话不多说,按刚才的结论,这也就是问有多少个\(x\)满足\(gcd(n,x)=d\)。

有多少个\(x\)满足\(gcd(n,x)=d\):这又是个数论问题,首先,变换成\(gcd(\frac{n}{d},\frac{x}{d})=1\),这个变换是科学的,因为\(gcd(n,x)=d\)中\(n\)和\(x\)一定是\(d\)的倍数。那么,有多少个\(x\)满足\(gcd(\frac{n}{d},\frac{x}{d})=1\)呢?由于满足\(gcd(\frac{n}{d},狗)=1\)的狗有\(\phi(n/d)\)个(根据欧拉函数的定义),而狗和\(x\)显然是一一对应的,所以这样的\(x\)就也有\(\phi(n/d)\)个。

所以,\(ans=\frac{1}{n}\Sigma^{n}_{i=1}p^{c_i}=\frac{1}{n}\Sigma_{d|n}\phi(\frac{n}{d})p^d\),这里\(d|n\)是因为根据上面推导,循环节数量\(d\)显然一定是\(n\)的因子。

[组合数学] 圆排列和欧拉函数为啥有关系:都是polya定理的锅的更多相关文章

  1. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化

    分析(官方题解): 一点感想: 首先上面那个等式成立,然后就是求枚举gcd算贡献就好了,枚举gcd当时赛场上写了一发O(nlogn)的反演,写完过了样例,想交发现结束了 吐槽自己手速慢,但是发了题解后 ...

  2. BZOJ 2190仪仗队【欧拉函数】

    问题的唯一难点就是如何表示队长能看到的人数?如果建系,队长所在的点为(0,0)分析几组数据就一目了然了,如果队长能看到的点为(m,n),那么gcd(m,n)=1即m n 互质或者是(0,1),(1,0 ...

  3. XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】

    1615: 刘备闯三国之三顾茅庐(三) Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 45  Solved: 8[Submit][Status][W ...

  4. 由 [SDOI2012]Longge的问题 探讨欧拉函数和莫比乌斯函数的一些性质和关联

    本题题解 题目传送门:https://www.luogu.org/problem/P2303 给定一个整数\(n\),求 \[ \sum_{i=1}^n \gcd(n,i) \] 蒟蒻随便yy了一下搞 ...

  5. 【省选十连测之九】【DP】【组合计数去重】【欧拉函数】基本题

    目录 题意: 输入格式: 输出格式: 数据范围: 思路: 嵌套题的转移 基本题的转移 Part1 Part2 Part3 代码 题意: 这是一个关于括号组合的题. 首先定义一道题是由'(',')',' ...

  6. HDU 5430 Reflect(欧拉函数)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=5430 从镜面材质的圆上一点发出一道光线反射NNN次后首次回到起点. 问本质不同的发射的方案数. 输入描述 ...

  7. HDU 4483 Lattice triangle(欧拉函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4483 题意:给出一个(n+1)*(n+1)的格子.在这个格子中存在多少个三角形? 思路:反着想,所有情 ...

  8. hdu 5279 Reflect phi 欧拉函数

    Reflect Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chi ...

  9. UVA12493 - Stars(求1-N与N互质的个数)欧拉函数

    Sample Input 3 4 5 18 36 360 2147483647 Sample Output 1 1 2 3 6 48 1073741823 题目链接:https://uva.onlin ...

随机推荐

  1. E. Yet Another Task with Queens(分类思想)

    \(\color{Red}{描述}\) \(在n*n的棋盘上有m个K皇后,每个皇后可能被来自8个方向的其他皇后攻击\) \(每个皇后只可能被(0-8)只皇后攻击,分别求出被(0-8)只皇后攻击的皇后数 ...

  2. E - No Pain No Game 线段树 离线处理 区间排序

    E - No Pain No Game  HDU - 4630 这个题目很好,以后可以再写写.这个题目就是线段树的离线写法,推荐一个博客:https://blog.csdn.net/u01003321 ...

  3. 单调队列+二分 G - Queue 小阳买水果

    B. Queue 这个题目会做的很偶然,突然想到的,因为我们要求离这只海象的最远的比他年轻的海象,这个年轻的海象可以用单调栈维护. 就是从前往后遍历一遍,单调栈里面存年龄从小往大的海象,这个为什么这么 ...

  4. nginx代理路径配置总结

    一.发现问题 配置nginx代理的时候,发现location配置的路径和代理的上下文路径的组合不同,服务端接收到的uri的路径不同,导致了controller的RequestMapping匹配出现问题 ...

  5. Anaconda 常用命令大全

    帮助目录 检查conda版本 升级当前版本的conda 创建一个新环境 激活新环境 Linux,Mac: Windows: 列出所有的环境 切换环境(activate/deactivate) Linu ...

  6. ACM入门问题:最大利益问题

    设最大的利益为maxv,最小值为minv 1.求最大利益的简单算法 ;j<=n-;j++) ;i<=j-;i++) maxv =(maxv与R[j]-R[i]中较大的一个) maxv=ma ...

  7. Mysql常用sql语句(九)- like 模糊查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  8. STM32 标准库3.5修改默认外部8M晶振为16M晶振

    ST官方标准库V3.5默认的外部晶振频率为8M,实际使用中外部晶振需要修改为16M: 经过实验,修改有效,具体的patch如下: 修改 HSE_VALUE 值 diff --git "a/L ...

  9. STM32 ADC多通道规则采样和注入采样

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...

  10. python工业互联网应用实战1—SQL与ORM

    从sql到ORM应该说也是编程体系逐步演化的结果,通过类和对象更好的组织开个过程中遇到的各种业务问题,面向对象的解耦和内聚作为一套有效的方法论,对于复杂的企业应用而言确实能够解决实践过程中很多问题. ...