群论入门

Part 0 声明

本文若无特殊说明,所有集合皆为有限集合

Part 1 群定义

1.1 群

称一个集合 GG 和某种二元运算 \cdot 构成群当且仅当:

  • 存在单位元eG\exists e\in G 满足 gG\forall g\in Geg=ge=ge\cdot g=g\cdot e=g
  • 满足结合律g1,g2,g3G\forall g_1,g_2,g_3\in G,有 g1(g2g3)=(g1g2)g3g_1\cdot(g_2\cdot g_3)=(g_1\cdot g_2)\cdot g_3
  • 封闭g1,g2G\forall g_1,g_2\in G,满足 g1g2Gg_1\cdot g_2\in G
  • 存在逆元gG\forall g\in G,有 g1Gg^{-1}\in G 满足 gg1=g1g=eg\cdot g^{-1}=g^{-1}\cdot g=e

注意 GG 不一定满足交换律,满足交换律的群叫交换群或阿贝尔群

集合 GG 和运算 \cdot 构成的群记为 (G,)(G,\cdot),本文为了方便省略了运算 \cdot,统一记作群 GG

1.2 子群

对于一个群 GG,称群 HHGG 的子群当且仅当 HGH\subseteq G

例如模 33 意义下的乘法群 {1}\{1\} 是模 33 意义下的乘法群 {1,2}\{1,2\} 的子群。

1.3 左陪集和右陪集

对于一个群 GG、它的子群 HH 和一个 gGg\in G

  • 定义 gH={ghhH}g\cdot H=\{g\cdot h|h\in H\}HH 的左陪集;

  • 定义 Hg={hghH}H\cdot g=\{h\cdot g|h\in H\}HH 的右陪集;

例如 {2}\{2\} 是模 33 意义下的乘法群 {1,2}\{1,2\} 的子群 {1}\{1\} 的左陪集,也是它的右陪集。

Part 2 群性质

2.1 群皆可逆矩阵群

考虑一个大小为 nn 的群 GGgG\forall g\in G,显然可以把 gg 写成一个 n×nn\times n 的 01 矩阵且保证写出的矩阵集仍是一个群。

所以任意群都和全体可逆矩阵群的一个子群同构

2.2 陪集的性质和 Lagrange 定理

2.2.1 陪集的性质

考虑群 GG 的任意子群 HH 和任意 a,bGa,b\in G:(这里考虑右陪集,左陪集同理)

  1. HaGH\cdot a\in G:由于 GG 是群所以封闭;

  2. aHaa\in H\cdot a:因为 eHe\in H

  3. aHHa=Ha\in H\Leftrightarrow H\cdot a=H:由于 HH 是群所以封闭;

  4. bHaHa=Hbb\in H\cdot a\Leftrightarrow H\cdot a=H\cdot b

    证明

    右到左显然,左到右:

    hH,ha=b\exist h\in H,h\cdot a=b,所以 Hb=H(ha)=(Hh)a=HaH\cdot b=H\cdot(h\cdot a)=(H\cdot h)\cdot a=H\cdot a。(根据 2)

    Q.E.D.

  5. HaH\cdot aHbH\cdot b 要么相等要么不交;

    证明

    若有交则 cHa,cHb\exist c\in H\cdot a,c\in H\cdot b,根据 3,Ha=Hc=HbH\cdot a=H\cdot c=H\cdot b

    Q.E.D.

  6. Ha=H|H\cdot a|=|H|

    证明

    Ha=H|H\cdot a|\not=|H|,则一定有 Ha<H|H\cdot a|<|H|,则有 h1,h2Hh_1,h_2\in H 满足 h1=h2h_1\not=h_2h1a=h2ah_1\cdot a=h_2\cdot a

    由于 aGa\in G,所以 a1Ga^{-1}\in G,所以 h1aa1=h2aa1h_1\cdot a\cdot a^{-1}=h_2\cdot a\cdot a^{-1}h1=h2h_1=h_2,矛盾。

    所以 Ha=H|H\cdot a|=|H|,Q.E.D.

2.2.2 Lagrange 定理

对于群 GG 的任意子群 SS,均有 G|G|S|S| 的因子。

证明是显然的,根据 2.2.1 中的 1、5、6 立得。

推论:gcd(x,p)=1,xφ(p)1(modp)\forall \gcd(x,p)=1,x^{\varphi(p)}\equiv 1\pmod p

考虑模 mm 的乘法群 Sp={x1x<p,gcd(x,p)=1}S_p=\{x|1\le x<p,\gcd(x,p)=1\},显然有 Sp=φ(p)|S_p|=\varphi(p)

对于 SpS_p 的幂子群 Hx={xy mod pyN}(xSp)H_x=\{x^y\text{ mod } p|y\in \mathbb{N}\}(x\in S_p),均有 Hx|H_x|Sp|S_p|φ(p)\varphi(p) 的因数。

因为 xHx1(modp)x^{|H_x|}\equiv 1\pmod p,所以 xφ(p)(xHx)φ(p)Hx1(modp)x^{\varphi(p)}\equiv (x^{|H_x|})^{\frac{\varphi(p)}{|H_x|}}\equiv 1\pmod p

Part 3 群作用

考虑一个置换群 GG 和一个集合 XX,满足 xX,gG\forall x\in X,g\in G 都有 xgXx\cdot g\in X

这时称 GGXX 上的作用,例如 nn 阶置换群就是 nn 阶排列集上的作用。

3.1 轨道和定点

xX\forall x\in X,定义 GG 作用在 XX 上的轨道 OxO_x定作用集(其实是群) GxG_x

Ox={xggG}Gx={ggG,xg=x}O_x=\{x\cdot g|g\in G\}\\ G_x=\{g|g\in G,x\cdot g=x\}\\

OxO_x 实际上是在 GG 作用下 XX 中与 xx 等价元素的集合

考察 GxG_x 的性质:

  • GxGG_x\subseteq G
  • 存在单位元:eGxe\in G_x,这很显然;
  • 满足结合律:g1,g2,g3Gx\forall g_1,g_2,g_3\in G_x,有 g1(g2g3)=(g1g2)g3g_1\cdot(g_2\cdot g_3)=(g_1\cdot g_2)\cdot g_3,这也很显然;
  • 封闭:g1,g2Gx\forall g_1,g_2\in G_xg1g2Gxg_1\cdot g_2\in G_x,因为 xg1g2=(xg1)g2=xg2=xx\cdot g_1\cdot g_2=(x\cdot g_1)\cdot g_2=x\cdot g_2=x
  • 存在逆元:gGx\forall g\in G_xg1Gxg^{-1}\in G_x,因为 xg=xx=xg1x\cdot g=x\Leftrightarrow x=x\cdot g^{-1}

所以 GxG_x GG 的子群

3.2 Burnside 引理和 Polya 定理

3.2.1 轨道-不动点引理(Orbit-stabilizer 引理)

Ox×Gx=G|O_x|\times |G_x|=|G|

证明

有:

g1,g2G,xg1=xg2Gxg1=Gxg2\forall g_1,g_2\in G,x\cdot g_1=x\cdot g_2\\ G_x\cdot g_1=G_x\cdot g_2\\

证明

xg1g21=xg1g21Gxg1Gxg2,g2Gxg1Gxg1=Gxg2\begin{aligned} &\because x\cdot g_1\cdot g_2^{-1}=x\\ &\therefore g_1\cdot g_2^{-1}\in G_{x}\\ &\therefore g_1\in G_x\cdot g_2,g_2\in G_x\cdot g_1\\ &\therefore G_x\cdot g_1=G_x\cdot g_2 \end{aligned}

Q.E.D.

也就是说,每个满足 xgyOxx\cdot g_y\in O_xgyg_y 都在 GxgyG_x\cdot g_y 这个右陪集中,并且每个 yOxy\in O_x 都单独对应一个 GxG_x 的右陪集。由于子群的不同右陪集互不相交、大小相等且覆盖整个大群(Lagrange 定理、陪集的性质),所以:

Ox=G/Gx={GxggG}\begin{aligned} \therefore |O_x|=|G/G_x|=|\{G_x\cdot g|g\in G\}| \end{aligned}

那么显然有:

Ox×Gx=G|O_x|\times |G_x|=|G|

Q.E.D.

3.2.2 Burnside 引理

Xg={xxX,xg=x}X^g=\{x|x\in X,x\cdot g=x\}X/G={OxxX}X/G=\{O_x|x\in X\}XXGG 作用下的轨道集合(X/G|X/G| 即为 XXGG 作用下本质不同元素个数),则:

X/G=1GgGXg|X/G|=\frac{1}{|G|}\sum\limits_{g\in G}|X^g|

证明

根据轨道-不动点引理:

Ox×Gx=G|O_x|\times |G_x|=|G|

并且注意到:

xXGx=gGXgxX/Gx=Xy1,y2Ox,Gy1=Gy2\sum\limits_{x\in X} |G_x|=\sum\limits_{g\in G}|X^g|\\ \sum\limits_{x\in X/G}|x|=|X|\\ \forall y_1,y_2\in O_x,G_{y_1}=G_{y_2}

所以:

gGXg=xXGx=OxX/GyOxGy=OxX/GOx×Gx=X/G×G\begin{aligned} \sum\limits_{g\in G}|X^g|&=\sum\limits_{x\in X} |G_x|=\sum\limits_{O_x\in X/G}\sum\limits_{y\in O_x}|G_y|\\ &=\sum\limits_{O_x\in X/G}|O_x|\times |G_x|\\ &=|X/G|\times |G| \end{aligned}

Q.E.D.

3.2.3 Polya 定理

考虑给所有满足 xXx\in Xxx 中元素染上 mm 种不同颜色(相同颜色元素本质相同)。gG\forall g\in G,设 c(g)c(g)gg 中轮换个数(置换中环的个数),则在 GG 作用下本质不同染色方案数为:

1GgGmc(g)\frac{1}{|G|}\sum\limits_{g\in G}m^{c(g)}

证明

只需证明 Xg=mc(g)|X^g|=m^{c(g)}

由于对于每一个 gg 的轮换 oooo 中元素染相同颜色才能在应用变换 gg 后保持不变,所以每个轮换有 mm 种染色方案。而一共有 c(g)c(g) 个轮换,所以有 mc(g)m^{c(g)} 种染色方式在应用变换 gg 后保持不变。

所以 Xg=mc(g)|X^g|=m^{c(g)},Q.E.D.

Tips:

观察 Ploya 定理的证明过程,不难发现对于置换作用 gg,满足 xg=xx\cdot g=xxXx\in X 必定满足位于同一个轮换的元素本质相同。

这方便了 Burnside 引理的应用。

Part 4 群例题

  • P4980 【模板】Pólya 定理

    查看题解

    考虑 nn 阶顺时针旋转置换构成的集合 GG

    • 存在单位元:置换 pi=ip_i=iGG 中;
    • 满足结合律:显然;
    • 封闭:显然;
    • 存在逆元:显然,可以绕一大圈再回来;

    所以 GG 是一个群。

    考虑 Polya 定理:

    X[m]/G=1GgGmc(g)|X[m]/G|=\frac{1}{|G|}\sum\limits_{g\in G}m^{c(g)}

    注意到 gG\forall g\in G,若 pgp\cdot gp1pxp_1\to p_x,则 gg 中置换环有 gcd(x,n)\gcd(x,n) 个,即 c(g)=gcd(x,n)c(g)=\gcd(x,n)。证明考虑从 iii+x1 mod n+1i+x-1\text{ mod }n+1 即旋转后的点连边。

    所以答案即为:

    1ndnndi=1nd[gcd(i,nd)=1]=1ndnndφ(nd)\frac{1}{n}\sum\limits_{d|n}n^d\sum\limits_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]=\frac{1}{n}\sum\limits_{d|n} n^d\varphi(\frac{n}{d})

    有一个神奇的结论,dnO(d)=O(n34)\sum\limits_{d|n}O(\sqrt d)=O(n^{\frac{3}{4}}),所以暴力计算 φ(nd)\varphi(\frac{n}{d}) 能过。

    考虑时间复杂度更正确的做法,实际上可以把 nn 质因数分解,求 φ(nd)\varphi(\frac{n}{d}) 时再 O(logn)O(\log n) 分解质因数根据 φ\varphi 的积性算出 φ(nd)\varphi(\frac{n}{d})。单次时间复杂度 O(nlogn)O(\sqrt n\log n)

    代码如下:(O(Tnlogn)O(T\sqrt n\log n) 做法)

    #include <iostream>
    #include <cstdio>
    #include <vector>
    
    using namespace std;
    
    const int S=100005,BS=35,p=1000000007;
    
    int n;
    bool nop[S];
    int tot,prime[S];
    int cp,ps[S],pi[S][BS];
    
    inline int qpow(int x,int y)
    {
    	int res=1;
    	for(;y>0;y>>=1,x=1ll*x*x%p) res=y&1?1ll*res*x%p:res;
    	return res;
    }
    
    inline void init()
    {
    	nop[0]=nop[1]=true;
    	for(int i=2;i<=S-3;i++)
    	{
    		if(!nop[i]) prime[++tot]=i;
    		for(int j=1;j<=tot;j++)
    		{
    			if(1ll*i*prime[j]>S-3) break;
    			nop[i*prime[j]]=true;
    			if(i%prime[j]==0) break;
    		}
    	}
    }
    
    inline void slove()
    {
    	scanf("%d",&n);
    	cp=0;
    	int tn=n;
    	for(int i=1;1ll*prime[i]*prime[i]<=tn;i++)
    	{
    		if(tn%prime[i]==0)
    		{
    			++cp;
    			int tt=1;
    			ps[cp]=prime[i],pi[cp][0]=1,pi[cp][1]=ps[cp]-1;
    			while(tn%ps[cp]==0) tn/=ps[cp],pi[cp][tt+1]=pi[cp][tt]*ps[cp],tt++;
    		}
    	}
    	if(tn>1) cp++,ps[cp]=tn,pi[cp][0]=1,pi[cp][1]=tn-1;
    	int sum=0;
    	for(int i=1;1ll*i*i<=n;i++)
    	{
    		if(n%i==0)
    		{
    			int d=i,pid=1;
    			for(int j=1;j<=cp;j++)
    			{
    				int ct=0;
    				while(d%ps[j]==0) ct++,d/=ps[j];
    				pid*=pi[j][ct];
    			}
    			sum=(sum+1ll*qpow(n,n/i)*pid%p)%p;
    			if(i*i!=n)
    			{
    				d=n/i,pid=1;
    				for(int j=1;j<=cp;j++)
    				{
    					int ct=0;
    					while(d%ps[j]==0) ct++,d/=ps[j];
    					pid*=pi[j][ct];
    				}
    				sum=(sum+1ll*qpow(n,i)*pid%p)%p;
    			}
    		}
    	}
    	sum=1ll*sum*qpow(n,p-2)%p;
    	printf("%d\n",sum);
    }
    
    int main()
    {
    	init();
    	int T;
    	scanf("%d",&T);
    	while(T-->0) slove();
    	return 0;
    }
    

  • 【2023NOI模拟赛27】美术作业

  • 洛谷题目列表&tag=Polya 定理