【学习笔记】Polya定理

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


群定义

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

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

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

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

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

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

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

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

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

子群:即一个群(Hin G.)

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

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

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

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

[forall gin G,|H|=|Hg| ]

证明:

(forall h_1in H,h_2in H,h_1·g ot =h_2·g)故得证。

[forall gin G,gin Hg ]

证明:

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

[Hg=HLongleftrightarrow gin H ]

证明:

(H)具有封闭性。

[Ha=HbLongleftrightarrow a·b^{-1}in H ]

证明:

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

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

[Hacap Hb ot =oslash o Ha=Hb ]

证明:

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

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


群作用

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

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

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

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


置换

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

[ ho= binom{1,2,3,4,5}{2,1,3,4,5} ]

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

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

关于运算:( ho(a)=(a_{ ho_1},a_{ ho_2}...))

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


轨道-稳定子定理

定义:

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

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

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

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


Burnside 引理

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

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

则不同等价类的数量为:

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

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

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

证明待补。

关于这道题:群中元素就是(left { TurnZeroPlace,TurnOnePlace,TurnTwoPlace...Turn(N-1)Place ight },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
",ans);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/h-lka/p/13663717.html