[学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理

群与子群

< G , o p > <G,op> <G,op> 是一个群需要满足以下条件:

  • o p op op 是一个满足结合律的二元运算,如 *+
  • G G G 是一个集合,存在单位元 e e e
  • G G G 中所有元素都有逆元。
  • G G G o p op op 运算封闭,封闭简单理解就是元素的逆元也在里面,有单位元,任意两个数二元运算结果也在里面。

这里的单位元,逆元,结合律按照一般的意思来理解即可。

虽然没有要求满足交换律,但还是定义逆元是 x x − 1 = x − 1 x = e xx^{-1}=x^{-1}x=e xx1=x1x=e

如果还满足交换律就叫做交换群。

群内元素只有“乘法”这一种运算规则,这个“乘法”指的就是 o p op op 运算。

例如,op='+',那么 x y = x + y , x x − 1 = x + x − 1 = e xy=x+y,xx^{-1}=x+x^{-1}=e xy=x+y,xx1=x+x1=e

< H , o p > <H,op> <H,op> < G , o p > <G,op> <G,op> 的子群,满足两个条件:

  • H H H G G G 的子集。
  • < H , o p > <H,op> <H,op> 是个群。

群元素个数有穷时,阶就等于元素个数。

置换群

映射:两个集合之间元素的对应关系,可能一对多,多对一,一对一等。

置换:有限集合到自身的双射,即一一对应。

S = { a 1 , a 2 , . . . , a n } S=\{a_1,a_2,...,a_n\} S={a1,a2,...,an} 的一个置换 f = ( a 1 a 2 … a n a p 1 a p 2 … a p n ) f=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\end{pmatrix} f=(a1a2anap1ap2apn)

表示:将 a i a_i ai 映射成 a p i a_{p_i} api,即 a i = a p i a_i=a_{p_i} ai=api。其中 p 1 , . . . , p n p_1,...,p_n p1,...,pn 是一个 n n n 元排列。

显然 S S S 上所有的置换个数为 n ! n! n!

置换的乘法:即函数的合成。

对于两个置换 f = ( a 1 a 2 … a n a p 1 a p 2 … a p n ) , g = ( a p 1 a p 2 … a p n a q 1 a q 2 … a q n ) f=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\end{pmatrix},g=\begin{pmatrix}a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\\a_{q_1}\quad a_{q_2}\quad\dots\quad a_{q_n}\\\end{pmatrix} f=(a1a2anap1ap2apn),g=(ap1ap2apnaq1aq2aqn) f f f g g g 的乘积记为 f ∘ g = ( a 1 a 2 … a n a q 1 a q 2 … a q n ) f\circ g=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{q_1}\quad a_{q_2}\quad\dots\quad a_{q_n}\\\end{pmatrix} fg=(a1a2anaq1aq2aqn)

即先做 f f f 的映射再做 g g g 的映射。

定义 S n = { S_n=\{ Sn={ 所有的 n n n 元排列 } \} }。装备了乘法 o p op op S n S_n Sn 的子群叫做 n n n 元置换群。

循环置换

循环置换是一类特殊的置换,表示为 ( a 1 , a 2 , . . . , a m ) = ( a 1 , a 2 , . . . , a m − 1 , a m a 2 , a 3 , . . . , a m , a 1 ) (a_1,a_2,...,a_m)=\begin{pmatrix}a_1,a_2,...,a_{m-1},a_m\\a_2,a_3,...,a_m,a_1\end{pmatrix} (a1,a2,...,am)=(a1,a2,...,am1,ama2,a3,...,am,a1)

若两个置换不含有相同的元素,则称它们是不相交的。

举个例子 A = ( a 1 , a 2 a 2 , a 1 ) , B = ( a 4 , a 5 , a 6 a 5 , a 4 , a 6 ) A=\begin{pmatrix}a_1,a_2\\a_2,a_1\end{pmatrix},B=\begin{pmatrix}a_4,a_5,a_6\\a_5,a_4,a_6\end{pmatrix} A=(a1,a2a2,a1),B=(a4,a5,a6a5,a4,a6),则 A , B A,B A,B 就是不相交的,所含元素集合的交为空。

任何一个置换都可以分解成若干个( ≥ 1 \ge 1 1)不相交的循环置换的乘积。

举个例子, ( a 1 , a 2 , a 3 , a 4 , a 5 , a 6 a 2 , a 1 , a 3 , a 6 , a 4 , a 5 ) = ( a 1 , a 2 ) ∘ ( a 3 ) ∘ ( a 5 , a 6 , a 4 ) \begin{pmatrix}a_1,a_2,a_3,a_4,a_5,a_6\\a_2,a_1,a_3,a_6,a_4,a_5\end{pmatrix}=(a_1,a_2)\circ(a_3)\circ(a_5,a_6,a_4) (a1,a2,a3,a4,a5,a6a2,a1,a3,a6,a4,a5)=(a1,a2)(a3)(a5,a6,a4)

证明:很简单,将元素看作点,映射关系当成边,则每个节点的入度和出度都为 1 1 1。形成的图形必然是若干个环集合,而一个环就代表一个循环置换。

群的陪集分解

G G G 是群, H H H G G G 的子群, a ∈ G a\in G aG

定义 H a = { h ∣ h a ∈ H } Ha=\{h\mid ha\in H\} Ha={hhaH}。(这里的 h a ha ha 做乘法,是群的运算符号,即 h ( o p ) a h(op)a h(op)a

H a Ha Ha 是子群 H H H 的在 G G G 中的一个右陪集。

显然 H e = H , a ∈ H a H_e=H,a\in Ha He=H,aHa

∀ a ∈ G \forall a\in G aG H , H a H,Ha H,Ha 等势。(集合大小相同)

证明:构造从 H → H a H\rightarrow Ha HHa 的双射,只需让 f ( h ) = h a f(h)=ha f(h)=ha 即可。

这说明在有限集的情况, H H H H a Ha Ha 的阶相同。

∀ a , b ∈ G , a ∈ H b \forall a,b\in G,a\in Hb a,bG,aHb 等价于 a b − 1 ∈ H ab^{-1}\in H ab1H 等价于 H a = H b Ha=Hb Ha=Hb

证明: a ∈ H b ⇒ a b − 1 ∈ H ⇒ H a b − 1 ∈ H a\in Hb\Rightarrow ab^{-1}\in H\Rightarrow Hab^{-1}\in H aHbab1HHab1H H H H 是群,对内部元素是封闭的) ⇒ H a ∈ H b \Rightarrow Ha\in Hb HaHb

基于此,我们可以定义等价类关系并进行等价类分解。

定义等价类关系, ∀ a , b ∈ G , a b − 1 ∈ H \forall a,b\in G,ab^{-1}\in H a,bG,ab1H,则将 a , b a,b a,b 划分在同一个等价类里面。(以 H H H 为判定条件划分 G G G 这个群空间)

同时得到 lagrange定理

拉格朗日定理:设 G G G 是有限群, H H H G G G 的子群,则 G G G 的阶一定是 H H H 阶的倍数,具体是多少倍看能分出多少个等价类来。

G G G 划分成 H a , H b , . . . , H Ha,Hb,...,H Ha,Hb,...,H,任意两个 a b − 1 ∉ H ab^{-1}\not\in H ab1H,而上面又证明了 ∣ H a ∣ = ∣ H ∣ = ∣ H b ∣ = . . . |Ha|=|H|=|Hb|=... Ha=H=Hb=...

每个等价类的大小是一样的。

左陪集 a H aH aH 与右陪集完全一样,不再赘述。

轨道-稳定子集定理

G G G 是集合 Ω \Omega Ω 上的有穷置换群。 a ∈ Ω a\in \Omega aΩ

定义 G a = { g ∣ g ∈ G ∧ g ( a ) = a } G^a=\{g\mid g\in G\wedge g(a)=a\} Ga={ggGg(a)=a},称 G a G^a Ga a a a 的稳定子群。

解释: a a a 是一个数, g g g 是一个置换, G a G^a Ga 是所有置换 g g g 满足 g g g 作用于 a a a 后仍是 a a a 不变的集合。

举个例子,一个置换 g = ( 1   2   3   4   5 5   3   2   4   1 ) g=\begin{pmatrix}1\ 2\ 3\ 4\ 5\\5\ 3\ 2\ 4\ 1\end{pmatrix} g=(1 2 3 4 55 3 2 4 1),那么 G 4 G^4 G4 就会含有这个 g g g

定义 G ( a ) = { g ( a ) ∣ g ∈ G } G(a)=\{g(a)\mid g\in G\} G(a)={g(a)gG},称 G ( a ) G(a) G(a) a a a 的轨道。

解释: a a a 是一个数, g g g 是一个置换, g ( a ) g(a) g(a) g g g 作用于 a a a 后的值, G ( a ) G(a) G(a) 是这些值的集合。

G G G 中所有置换作用于 a a a 后可能的值的集合。

举个例子,一个置换 g ∈ G , g = ( 1   2   3   4   5 5   3   2   4   1 ) g\in G,g=\begin{pmatrix}1\ 2\ 3\ 4\ 5\\5\ 3\ 2\ 4\ 1\end{pmatrix} gG,g=(1 2 3 4 55 3 2 4 1),那么 G ( 1 ) G(1) G(1) 就会含有 5 5 5 G ( 2 ) G(2) G(2) 就会含有 3 3 3

轨道-稳定子集定理: ∣ G ∣ = ∣ G ( a ) ∣ ∣ G a ∣ \big|G\big|=\big|G(a)\big|\big|G^a\big| G=G(a)Ga

证明:

首先显然 G a G^a Ga G G G 的子群, G a G^a Ga 对置换作用在置换上的这个二元运算封闭。

考虑陪集分解,任取两个置换 x , y ∈ G , x ( a ) = y ( a ) ⇔ x − 1 ( x ( a ) ) = a = x − 1 ( y ( a ) ) ⇔ x − 1 y ∈ G a ⇔ x G a = y G a x,y\in G,x(a)=y(a)\Leftrightarrow x^{-1}(x(a))=a=x^{-1}(y(a))\Leftrightarrow x^{-1}y\in G^a\Leftrightarrow xG^a=yG^a x,yG,x(a)=y(a)x1(x(a))=a=x1(y(a))x1yGaxGa=yGa

这说明 x x x y y y G G G 关于 G a G^a Ga 的陪集分解的同一个等价类中,当且仅当 x ( a ) = y ( a ) x(a)=y(a) x(a)=y(a)

也就是说 ∣ G ( a ) ∣ |G(a)| G(a) G G G 关于 G a G^a Ga 的陪集分解的等价类的个数。

由拉格朗日定理知,等价类的个数也就是 G G G 的阶是 G a G^a Ga 的阶的倍数。

得证。

burnside 引理

A , B A,B A,B 为有限集合。

G G G A A A 上的置换群; g g g ∈ G \in G G 的一个置换。

X : X: X: 一些从 A A A B B B 的映射集合,且 X X X G G G 下封闭。

X / G : G X/G:G X/G:G 作用在 X X X 上产生的所有等价类集合。

(若 X X X 的两个映射经过 G G G 的置换作用后相同,则在同一个等价类中)

C ( g ) C(g) C(g) g g g 作用在元素后不变的元素集合大小,即 C ( g ) = ∣ X g ∣ , X g = { a ∣ g ( a ) = a } C(g)=|X^g|,X^g=\{a\mid g(a)=a\} C(g)=Xg,Xg={ag(a)=a}
∣ X / G ∣ = 1 ∣ G ∣ ∑ g ∈ G C ( g ) = ∑ a ∈ A 1 ∣ G ( a ) ∣ |X/G|=\frac{1}{|G|}\sum_{g\in G}C(g)=\sum_{a\in A}\frac 1{|G(a)|} X/G=G1gGC(g)=aAG(a)1

证明:
∑ g ∈ G C ( g ) = ∑ a ∈ A ∣ G a ∣ = ∑ a ∈ A ∣ G ∣ ∣ G ( a ) ∣ = ∣ G ∣ ∑ a ∈ A 1 ∣ G ( a ) ∣ ⇒ 1 ∣ G ∣ ∑ g ∈ G C ( g ) = ∑ a ∈ A 1 ∣ G ( a ) ∣ = ∣ X / G ∣ \sum_{g\in G}C(g)=\sum_{a\in A} |G^a|=\sum_{a\in A}\frac{|G|}{|G(a)|}=|G|\sum_{a\in A}\frac{1}{|G(a)|}\Rightarrow \frac{1}{|G|}\sum_{g\in G}C(g)=\sum_{a\in A}\frac{1}{|G(a)|}=|X/G| gGC(g)=aAGa=aAG(a)G=GaAG(a)1G1gGC(g)=aAG(a)1=X/G
∑ g ∈ G C ( g ) : \sum_{g\in G}C(g): gGC(g): 枚举置换,然后累和每个置换中不动点的个数。

∑ a ∣ G a ∣ : \sum_a|G^a|: aGa: 枚举数,然后累和满足 a a a 为不动点的置换个数。

二者只是枚举出发方向不同,但结果是相同的。

∑ a 1 ∣ G ( a ) ∣ : \sum_a\frac 1{|G(a)|}: aG(a)1: 由轨道-稳定子集定理,我们知道以 a a a 为分解参照, G ( a ) G(a) G(a) 内的所有元素构成一个等价类。

由陪集分解知, G G G 是一个群,无论 a a a 是什么,所有等价类都是大小一样的。

那么假设 ∣ G ( a ) ∣ = x |G(a)|=x G(a)=x,即所有等价类的大小均为 x x x,每个数都会贡献 1 x \frac{1}{x} x1 ∣ G ∣ ∗ 1 x |G|*\frac{1}{x} Gx1 得到的就是等价类的个数,即 ∣ X / G ∣ |X/G| X/G

polya 定理

定义加强 X : X: X: 所有 A A A B B B 的映射;定义 c ( g ) : c(g): c(g): 置换 g g g 能拆分成的不相交的循环置换的个数。即环的个数。
∣ X / G ∣ = 1 ∣ G ∣ ∑ g ∈ G ∣ B ∣ c ( g ) |X/G|=\frac{1}{|G|}\sum_{g\in G}|B|^{c(g)} X/G=G1gGBc(g)
例如:对于有 n n n 个点形成的环 m m m 种颜色的染色问题, A = { 1 , 2 , . . . , n } , B = { 1 , 2 , . . . , m } A=\{1,2,...,n\},B=\{1,2,...,m\} A={1,2,...,n},B={1,2,...,m} ∣ X g ∣ = m c ( g ) |X^g|=m^{c(g)} Xg=mc(g)

将置换看作图上的一条有向边,若置换后 u → v u\rightarrow v uv,就连一条有向边。那么就形成若干个环,环中元素的颜色一定相同。


O I OI OI 中一般求本质不同的方案数,本质不同就是不再同一个等价类,换言之一般考察的问题答案就是等价类个数 ∣ X / G ∣ |X/G| X/G

经典例题:poj2154

∣ X / G ∣ = 1 ∣ G ∣ ∑ g ∈ G m c ( g ) ⇒ a n s = 1 n ∑ i = 1 n n ( n , i ) |X/G|=\frac{1}{|G|}\sum_{g\in G}m^{c(g)}\Rightarrow ans=\frac{1}{n}\sum_{i=1}^nn^{(n,i)} X/G=G1gGmc(g)ans=n1i=1nn(n,i)

i i i 种置换的循环节个数为 gcd ⁡ ( n , i ) \gcd(n,i) gcd(n,i)

这个环只能顺时针/逆时针转动,不妨考虑顺时针,那么转 0 ∼ n − 1 0\sim n-1 0n1 个元素就对应不同的置换,共 n n n 种。

假设当前环的开头为 x x x,在第 i i i 种置换下有 x → x + i → x + 2 i → ⋯ → x x\rightarrow x+i\rightarrow x+2i\rightarrow\dots\rightarrow x xx+ix+2ix
在这里插入图片描述

假设在 x + k i x+ki x+ki 回到开头,则 x ≡ x + k i ( m o d n ) ⇒ k i ≡ 0 ( m o d n ) ⇒ k = n gcd ⁡ ( n , i ) x\equiv x+ki\pmod n\Rightarrow ki\equiv 0\pmod n\Rightarrow k=\frac{n}{\gcd(n,i)} xx+ki(modn)ki0(modn)k=gcd(n,i)n

这个 k k k 恰好就是环长度,所以个数为 n / k = gcd ⁡ ( i , n ) n/k=\gcd(i,n) n/k=gcd(i,n)
1 n ∑ i = 1 n n ( n , i ) = 1 n ∑ d = 1 n ∑ i = 1 n n d [ ( n , i ) = d ] = ∑ d ∣ n ∑ i = 1 n n d − 1 φ ( n d ) \frac{1}{n}\sum_{i=1}^nn^{(n,i)}=\frac{1}{n}\sum_{d=1}^n\sum_{i=1}^nn^{d}[(n,i)=d]=\sum_{d\mid n}\sum_{i=1}^nn^{d-1}\varphi(\frac nd) n1i=1nn(n,i)=n1d=1ni=1nnd[(n,i)=d]=dni=1nnd1φ(dn)
可以在 O ( n ) O(\sqrt n) O(n ) 时间内枚举所有因数 d d d

预处理 1 e 6 1e6 1e6 以内的 φ \varphi φ,后面的就 n \sqrt{n} n 暴力算。

#include <cstdio>
#define maxn 1000005
int mod, cnt;
bool vis[maxn];
int prime[maxn], phi[maxn];

void sieve( int n = 1e6 ) {
	phi[1] = 1;
	for( int i = 2;i <= n;i ++ ) {
		if( ! vis[i] ) prime[++ cnt] = i, phi[i] = ( i - 1 );
		for( int j = 1;j <= cnt and 1ll * i * prime[j] <= n;j ++ ) {
			vis[i * prime[j]] = 1;
			if( i % prime[j] == 0 ) {
				phi[i * prime[j]] = phi[i] * prime[j];
				break;
			}
			else phi[i * prime[j]] = phi[i] * phi[prime[j]];
		}
	}
}

int qkpow( int x, int y ) {
	x %= mod;
	int ans = 1;
	while( y ) {
		if( y & 1 ) ans = ans * x % mod;
		x = x * x % mod;
		y >>= 1;
	}
	return ans;
}

int PHI( int x ) {
	if( x <= 1e6 ) return phi[x] % mod;
	int ans = x;
	for( int i = 2;i * i <= x;i ++ )
		if( x % i == 0 ) {
			ans = ans / i * ( i - 1 );
			while( x % i == 0 ) x /= i;
		}
	if( x ^ 1 ) ans = ans / x * ( x - 1 );
	return ans % mod;
}

int main() {
	sieve();
	int T, n;
	scanf( "%d", &T );
	while( T -- ) {
		scanf( "%d %d", &n, &mod );
		long long ans = 0;
		for( int i = 1;i * i <= n;i ++ ) {
			if( n % i ) continue;
			if( i * i == n ) 
				(ans += qkpow(n, i - 1) * PHI(n / i) % mod) %= mod;
			else
				(ans += qkpow(n, i - 1) * PHI(n / i) % mod + qkpow(n, n / i - 1) * PHI(i) % mod) %= mod;
		}
		printf( "%lld\n", ans );
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值