【学习笔记】Polya定理

笔者经多番周折终于看懂了\(\text{Burnside}\)定理和\(\text{Polya}\)定理,特来写一篇学习笔记来记录一下。


群定义

定义:群\((G,·)\)是一个集合与一个运算·所定义的群。它所需要满足的性质是:

  • 结合律:对于任意\(a,b,c\in G,a·b·c=a·(b·c).\)

  • 封闭性:对于任意\(a,b\in G,a·b\in G.\)

  • 单位元:存在\(e\in G,a·e=a.\)

  • 逆元:\(\forall a\in G,\exists a'\in G,a·a'=a'·a=e.\)

举一个例子:对于正方形旋转组成的群(旋转度数分别为\(0,90,180,270\)),旋转操作就是群中的元素,单位元就是旋转度数为\(0\)的操作。结合律显然满足,我们看剩下两个条件:

  • 封闭性:先旋转\(90'\)再旋转\(270'\)就相当于旋转\(360'\)即旋转\(0'\in G.\)容易证明对于每一种操作都存在这种封闭性。

  • 逆元:对于旋转\(90'\)的操作我们可以再旋转\(270'\)将它转换为单位元\(0'.\)对其它所有元素均存在逆元。

所以这个由旋转操作构成的集合(操作是连续旋转)可以被证明是一个群。

子群:即一个群\(H\in G.\)

注意,群中的元素不一定满足交换律,所以才有了左陪集和右陪集的区别:

  • 左陪集 对于一个子群\(H\in G,\)一个元素\(g\in G,gH\)称之为\(H\)的一个左陪集。\(gH=\forall h\in H,g·h.\)

  • 右陪集 对于一个子群\(H\in G,\)一个元素\(g\in G,Hg\)称之为\(H\)的一个右陪集。\(Hg=\forall h\in H,h·g.\)

陪集的一些性质(只讨论右陪集,左陪集同理)

\[\forall g\in G,|H|=|Hg| \]

证明:

\(\forall h_1\in H,h_2\in H,h_1·g\not =h_2·g\)故得证。

\[\forall g\in G,g\in Hg \]

证明:

由于\(H\)是群,所以包含单位元使得\(g\in H.\)

\[Hg=H\Longleftrightarrow g\in H \]

证明:

\(H\)具有封闭性。

\[Ha=Hb\Longleftrightarrow a·b^{-1}\in H \]

证明:

\(Ha=Hb\to Ha·b^{-1}=H\to a·b^{-1}\in H\)

\(a·b^{-1}\in H\to Ha·b^{-1}=H\to Ha=Hb\)

\[Ha\cap Hb\not =\oslash \to Ha=Hb \]

证明:

这条性质意味着\(H\)的陪集要么不相交要么相等。

\(c\in Ha,c\in Hb\to \exists h_1,h_2\in H,h_1·a=h_2·b=c\to a·b^{-1}=h_2·h_1^{-1}\in H\to Ha=Hb.\)


群作用

我们说一个群\(G\)作用于集合\(X\),当且仅当:

给定一个函数\(\varphi(v,x)\)(其中,\(v\in G,x\in X\))有:

\[\varphi(e,x)=x,\varphi(a,\varphi(b,x))=\varphi(a·b,x) \]

有上述函数时才有群\(G\)作用于\(X.\)


置换

用双行表示法来表示一个置换:

\[\rho=\tbinom{1,2,3,4,5}{2,1,3,4,5} \]

表示一个由序列\(1,2,3,4,5\)变为\(2,1,3,4,5\)的一个置换。大体就是用第一个元素代替第二个元素...以此类推。

一个长度为\(n\)的不同置换数为\(n!.\)

关于运算:\(\rho(a)=(a_{\rho_1},a_{\rho_2}...)\)

可以证明,这些置换组成了群。


轨道-稳定子定理

定义:

轨道\(G(x)\)\(x\)通过\(G\)中所有元素作用可以达到的所有元素的集合。\(g\in G,g(x)\)\(x\)通过\(g\)这个元素作用可以达到的所有元素。

稳定子\(G^x=\left \{ g|g\in G,g(x)=x \right \}\) 即群\(G\)中所有 \(g(x)=x\)\(g\) 的集合。

定理:\(|G^x|*|G(x)|=|G|\)

可以得到,每一个状态\(x\)一定只属于一个轨道。我们把\(g(x)=x\)的点看做一个轨道的结尾,这个定理就很好证明了。


Burnside 引理

定义\(G\)是一个置换群且作用于集合\(X,\)\(\exists x,y\in X,\exists f\in G,f(x)=y,\)\(x,y\)属于一个等价类。

注意!这里\(f(x)\)不是一个函数,而是元素\(x\)\(f\)作用下得到的元素。

则不同等价类的数量为:

\[Ans=\frac{1}{|G|}\sum_{g\in G}X^g \]

\(X^g=|G^x|.\)

文字描述:\(X\) 在群 \(G\) 作用下的等价类总数等于每一个 \(g\) 作用于 \(X\) 的不动点的算数平均值。

证明待补。

关于这道题:群中元素就是\(\left \{ TurnZeroPlace,TurnOnePlace,TurnTwoPlace...Turn(N-1)Place \right \},X\)是所有置换所形成的环。

对于旋转\(k\)个而言,其不动点等价于存在一个长度为\(a\)的循环节使得\(a|k.\)又因为必然\(a|n\)(转\(n\)格必然回到原始状态),所以改写判断条件为存在一个长度为\(\gcd(k,n)\)的循环节。而前\(\gcd(k,n)\)个元素可以任意填(染色,不是排列),所以答案就是\(\frac{1}{n}\sum_{k=1}^n n^{\gcd(k,n)}\)

枚举\(\gcd\)莫比乌斯反演得到\(Ans=\sum_{d|n} n^{d-1}\varphi(n/d)\)可以\(O(\sqrt{n})\)计算。

模板题链接

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
inline int add(int x,int y){return (x+y)%mod;}
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline int qpow(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=mul(res,a);
		a=mul(a,a);b>>=1;
	}
	return res;
}
int calc(int x){
	int ans=x;
	for(int i=2;i*i<=x;++i){
		if(x%i)continue;
		ans-=ans/i;
		while(x%i==0)x/=i;
	}
	if(x!=1)ans-=ans/x;
	return  ans;
}
int T,n;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		int ans=0;
		for(int i=1;i*i<=n;++i){
			if(n%i)continue;
			ans=add(ans,mul(qpow(n,i-1),calc(n/i)));
			if(i*i==n)continue;
			ans=add(ans,mul(qpow(n,n/i-1),calc(i)));
		}
		printf("%d\n",ans);
	}
	return 0;
}
posted @ 2020-09-13 22:12  Refined_heart  阅读(845)  评论(0编辑  收藏  举报