听大佬们说了这么久Pólya定理,终于有时间把这个定理学习一下了。


置换(permutation)简单来说就是一个(全)排列,比如 \(1,2,3,4\) 的一个置换为 \(3,1,2,4\)。一般地,我们记 \(i\) 到 \(a_i(1<=i<=n)\) 的一个置换为

\[\left (
\begin{matrix}
1 & 2 & \cdots & n \\
a_1 & a_2 & \cdots & a_n
\end{matrix}
\right )
\]

可以发现,置换的本质是一一映射,所以我们可以将上面的置换简记为 \(f=\{a_1,a_2,\cdots,a_n\}\),其中 \(f(i)=a_i(1<=i<=n)\)。从这种映射的角度来看,置换是可以复合的。如果 \(f=\{a_1,a_2,\cdots,a_n\},g=\{b_1,b_2,\cdots,b_n\}\),我们称 \(fg=\{b_{a_1},b_{a_2},\cdots,b_{a_n}\}\) 为 \(f\) 和 \(g\) 的复合。它表示我们先将一个数 \(i\) 映射到 \(f(i)\),再映射到 \(g(f(i))\)。比如,\(f=\{1,3,4,2\},g=\{3,2,1,4\}\),则 \(fg=\{3,1,4,2\}\),它表示 \(2\) 先映射到 \(f(2)=3\),这个 \(3\) 再映射到 \(g(3)=1\),所以总的来说,\(fg(2)=g(f(2))=1\)。

循环(permutation cycle)是一类特殊的置换,它表示一些元素有次序地交换位置。通常地,我们记置换\(\left(\begin{matrix} a_1 & a_2 & \cdots & a_{n-1} & a_n \\ a_2 & a_3 & \cdots & a_n & a_1\end{matrix}\right)\)的循环为 \((a_1,a_2,\cdots,a_n)\)。与置换类似,循环也有乘积。我们常用循环的乘积来表示置换,如\(\left(\begin{matrix} 1 & 2 & \cdots & k & k+1 & \cdots & n \\ 2 & 3 & \cdots & 1 & k+2 & \cdots & k+1\end{matrix}\right) = (1,2,\cdots,k)(k+1,\cdots,n)\)。虽然置换乘法是不可交换的,但我们应当发现,对不相交的循环,不论用什么方式相乘,其结果总是一样的。

那么置换和Pólya定理有什么关系呢?我们通过一道题目来阐述。

题目(等价类计数问题)在 \(2\times 2\) 的方格中,我们将每个方格涂成黑白两色。如果允许旋转,一共会有多少种方案?

分析 我们先考虑没有旋转的所有情况。有以下 \(16\) 种:

令方格的四个格子分别为 \(A_1,A_2,A_3,A_4\),分别对应坐标系中的四个象限。那么我们可以定义(顺时针)旋转集合 \(R=\{\) 旋转0°, 旋转90°, 旋转180°, 旋转270° \(\}=\{(A_1)(A_2)(A_3)(A_4),(A_1,A_2,A_3,A_4),(A_1,A_3)(A_2,A_4),(A_4,A_3,A_2,A_1)\}\)。通过这个集合我们可以定义一个等价关系:(顺时针)旋转后相等。我们将所有等价的元素分成一个集合,称之为一个等价类,则现在题目要求的就是\(R\)所定义的不同的等价类的个数。我们有结论:

引理(Burnside引理):如果对于一个操作集合 \(R\) 中的操作 \(f\),某个元素 \(s\) 在 \(f\) 操作后不变,则称 \(s\) 为 \(f\) 的不动点。若将 \(f\) 的不动点数目记为 \(C(f)\),则由 \(R\) 定义的所有等价类数量为所有 \(C(f)\)的平均值。

那么本题中就有所有等价类数目为 \((16 + 2 + 4 + 2) / 4 = 6\) 个。

现在来考虑如何求 \(C(f)\)。不难发现,如果一个操作 \(f\) 被分解为 \(m(f)\) 个循环,则每个循环内元素所染的颜色均相同。那么有 \(C(f)=2^{m(f)}\)。推广开来,如果不止 \(2\) 种颜色,而是 \(k\) 种,则有 \(C(f)=k^{m(f)}\)。代回Burnside引理就得到Pólya定理。

定理(Pólya定理):如果对于一个操作集合 \(R\) 中的操作 \(f\),可被分解为 \(m(f)\) 个循环,且每个元素最多有 \(k\) 种颜色,则由 \(R\) 定义的所有等价类数量为所有 \(k^{m(f)}\)的平均值。

例题 Pólya定理模板 题目大意:\(t(t<=10^3)\) 组数据,每组数据给定一个有 \(n(n<=10^9)\) 个点的环,染 \(n\) 种颜色,在只考虑旋转的情况下,有多少种不同的染色数?

分析 如果旋转 \(i\) 个距离,则 \(0,i,2i,\cdots\) 构成一个长度为 \(n/gcd(i,n)\) 的循环。一共有 \(n/(n/gcd(i,n))=gcd(i,n)\) 个循环,因此答案为 \(\frac1n\sum_{i=1}^n n^{gcd(i,n)}\)。容易发现,这样做肯定是要超时的。所以我们愉快地推一波式子。

\[\begin{aligned}
& \frac1n\sum_{i=1}^n n^{gcd(i,n)} \\
&=\frac1n\sum_{d|n}n^d\sum_{i=1}^n[gcd(i,n)=d] \\
&=\frac1n\sum_{d|n}n^d\sum_{i=1}^{\frac{n}{d}}[gcd(i\cdot d,n)=d] \\
&=\frac1n\sum_{d|n}n^d\sum_{i=1}^{\frac{n}{d}}[gcd(i,n/d)=1] \\
&=\frac1n\sum_{d|n}n^d\varphi(\frac{n}{d})
\end{aligned}
\]

然后就可以瞎搞暴力了。

#include<bits/stdc++.h>
using namespace std; typedef long ll;
const ll mod = 1E+9 + 7; ll T, n, ans; ll Phi(ll x)
{
ll res = 1;
for(ll i = 2; i * i <= x; ++i) {
if(!(x % i)) {
x /= i, res = res * (i - 1) % mod;
while(!(x % i)) x /= i, res = res * i % mod;
}
} if(x != 1) res = res * (x - 1) % mod;
return res;
} ll QuickPow(ll a, ll b)
{
ll res = 1; a %= mod;
while(b) {
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
} int main()
{
scanf("%lld", &T);
while(T--) {
ans = 0; scanf("%lld", &n);
for(ll i = 1; i * i <= n; ++i) {
if(n % i) continue; ans = (ans + (Phi(n / i) * QuickPow(n, i - 1))) % mod;
if(i * i != n) ans = (ans + (Phi(i) * QuickPow(n, n / i - 1))) % mod;
}
printf("%lld\n", ans);
}
}

置换及Pólya定理的更多相关文章

  1. 置换群 Burnside引理 Pólya定理(Polya)

    置换群 设\(N\)表示组合方案集合.如用两种颜色染四个格子,则\(N=\{\{0,0,0,0\},\{0,0,0,1\},\{0,0,1,0\},...,\{1,1,1,1\}\}\),\(|N|= ...

  2. 【BZOJ1478】Sgu282 Isomorphism Pólya定理神题

    [BZOJ1478]Sgu282 Isomorphism 题意:用$m$种颜色去染一张$n$个点的完全图,如果一个图可以通过节点重新标号变成另外一个图,则称这两个图是相同的.问不同的染色方案数.答案对 ...

  3. 数学:Burnside引理与Pólya定理

    这个计数定理在考虑对称的计数中非常有用 先给出这个定理的描述,虽然看不太懂: 在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积. 设C1(ak)是在置换ak的作用下不动 ...

  4. Burnside引理&Pólya定理

    Burnside's lemma 引例 题目描述 一个由2*2方格组成的正方形,每个格子上可以涂色或不涂色, 问共有多少种本质不同的涂色方案. (若两种方案可通过旋转互相得到,称作本质相同的方案) 解 ...

  5. @总结 - 12@ burnside引理与pólya定理

    目录 @0 - 参考资料@ @1 - 问题引入@ @2 - burnside引理@ @3 - pólya定理@ @4 - pólya定理的生成函数形式@ @0 - 参考资料@ 博客1 @1 - 问题引 ...

  6. Pólya 定理学习笔记

    在介绍\(Polya\) 定理前,先来介绍一下群论(大概了解一下就好): 群是满足下列要求的集合: 封闭性:即有一个操作使对于这个集合中每个元素操作完都使这个集合中的元素 结合律:即对于上面那个操作有 ...

  7. Burnside 引理与 Pólya 定理

    群 群的定义 在数学中,群是由一种集合以及一个二元运算所组成的,符合"群公理"的代数结构. 一个群是一个集合 \(G\) 加上对 \(G\) 的二元运算.二元运算用 \(\cdot ...

  8. 【POJ2154】Color Pólya定理+欧拉函数

    [POJ2154]Color 题意:求用$n$种颜色染$n$个珠子的项链的方案数.在旋转后相同的方案算作一种.答案对$P$取模. 询问次数$\le 3500$,$n\le 10^9,P\le 3000 ...

  9. 【POJ2409】Let it Bead Pólya定理

    [POJ2409]Let it Bead 题意:用$m$种颜色去染$n$个点的环,如果两个环在旋转或翻转后是相同的,则称这两个环是同构的.求不同构的环的个数. $n,m$很小就是了. 题解:在旋转$i ...

随机推荐

  1. LeetCode 86. 分隔链表(Partition List)

    86. 分隔链表 86. Partition List 题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的 ...

  2. Kafka性能调优 - Kafka优化的方法

    今天,我们将讨论Kafka Performance Tuning.在本文“Kafka性能调优”中,我们将描述在设置集群配置时需要注意的配置.此外,我们将讨论Tuning Kafka Producers ...

  3. 面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  4. linux 创建虚拟机常见错误

    无法打开内核设备global vmx86 重启虚拟机所有服务 无法创建虚拟机 需要使用管理员身份运行vm即可

  5. voltile解析

    https://www.cnblogs.com/dolphin0520/p/3920373.html

  6. PXC增量恢复添加节点(IST)

    绕开SST通过IST方式添加Node到Percona XtraDB Cluster  Gcache存储了所有的  writeset ,因此说这个集合的大小直接决定了允许其他节点宕机后多长时间内可以进行 ...

  7. 「LibreOJ NOI Round #2」不等关系

    「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的 ...

  8. SQL Server 索引优化-----数据库引擎优化顾问

    本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server  ...

  9. Linux用户管理的基本概念

    Linux系统如何区别不同的用户呢?可以很自然地想到,使用不同的用户名应该是一个好主意,就像真实世界中每个人都有名字一样.但“用户名”只是一种方便让人读的字符串,对机器来说是没有意义的.事实上,Lin ...

  10. UCOSIII系统内部任务

    1. 空闲任务 空闲任务是UCOSIII创建的第一个任务 空闲任务是UCOSIII必须创建的 空闲任务优先级总是为OS_CFG_PRIO_MAK-1 空闲任务中不能调用任何可使空闲任务进入等待态的函数 ...