【学习笔记】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 h_1\in H,h_2\in H,h_1·g\not =h_2·g\)故得证。
\]
证明:
由于\(H\)是群,所以包含单位元使得\(g\in H.\)
\]
证明:
群\(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\)
\]
证明:
这条性质意味着\(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\))有:
\]
有上述函数时才有群\(G\)作用于\(X.\)
置换
用双行表示法来表示一个置换:
\]
表示一个由序列\(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\)作用下得到的元素。
则不同等价类的数量为:
\]
\(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;
}
【学习笔记】Polya定理的更多相关文章
- [bzoj1488][HNOI2009]图的同构——Polya定理
题目大意 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经过一定的重新标号以后,a图的顶点集和边集能完全与b ...
- Burnside引理与Polya定理 学习笔记
原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...
- 等价类计数(Polya定理/Burnside引理)学习笔记
参考:刘汝佳<算法竞赛入门经典训练指南> 感觉是非常远古的东西了,几乎从来没有看到过需要用这个的题,还是学一发以防翻车. 置换:排列的一一映射.置换乘法相当于函数复合.满足结合律,不满足交 ...
- Polya 定理 学习笔记
群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...
- poj1265&&2954 [皮克定理 格点多边形]【学习笔记】
Q:皮克定理这种一句话的东西为什么还要写学习笔记啊? A:多好玩啊... PS:除了蓝色字体之外都是废话啊... Part I 1.顶点全在格点上的多边形叫做格点多边形(坐标全是整数) 2.维基百科 ...
- [置换群&Polya计数]【学习笔记】
昨天看了一下午<组合数学>最后一章然后晚上去看别人的blog发现怎么都不一样,我一定是学了假的polya 其实是一样的,只不过<组合数学>没有太多的牵扯群论.于是又从群论角度学 ...
- Pólya 定理学习笔记
在介绍\(Polya\) 定理前,先来介绍一下群论(大概了解一下就好): 群是满足下列要求的集合: 封闭性:即有一个操作使对于这个集合中每个元素操作完都使这个集合中的元素 结合律:即对于上面那个操作有 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- 等价类计数:Burnside引理 & Polya定理
提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...
随机推荐
- 总结一篇shell调试技巧及常见的脚本错误
#常见的调试命令工具 1.使用bash命令参数调试 #使用 [root@game ~]# sh [-xvn] test.sh #参数解释: -x:将执行的脚本内容输出出来,可以看到执行的过程 -n ...
- whlie do-whlie
switch语句 用于根据多个不同条件执行不同动作. while 循环 while循环基本语法: 条件初始化; while(条件表达式){ //条件表达式就是判 ...
- SpringBoot整合MinIO
今天因为公司的需求接触到这个东西,我们先来看下MinIO的官网简介 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大 ...
- 通达OA任意用户登录漏洞复现
前言 今年hw挺火爆的,第一天上来就放王炸,直接搞得hw暂停 昨天晚上无聊,复现了一下通达oa的洞,也有现成的exp可以使用,比较简单 0x00 漏洞概述 通达OA是一套国内常用的办公系统,此次发现的 ...
- Django 中 a href标签 使用方法 跳转页面(Django四)
上次我已经用Django启动了一个登录模板页面 具体过程见:Django启动我的第一个模板页面 但问题是我们只能通过监听的端口访问这一个页面,不能通过页面的一些连接跳转到其他页面如下,我们不能点击注册 ...
- Spring源码系列(三)--spring-aop的基础组件、架构和使用
简介 前面已经讲完 spring-bean( 详见Spring ),这篇博客开始攻克 Spring 的另一个重要模块--spring-aop. spring-aop 可以实现动态代理(底层是使用 JD ...
- 第3课 - makefile伪目标的引入
第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件 ==> 目标即文件名 (2)make 首先会检测目 ...
- Linq To EF 用泛型时生成的Sql会查询全表的问题
1.问题的现象 public class LinqHepler<T> where T:class { private EFDBContext _context = null; /// &l ...
- Android实现二值点阵图识别
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star 前言 我这几天在做一个东西,就是一张像二维码这样的 n*n ...
- canvas学习作业,模仿做一个祖玛的小游戏
这个游戏的原理我分为11个步骤,依次如下: 1.布局, 2.画曲线(曲线由两个半径不同的圆构成) 3.画曲线起点起始圆和曲线终点终止圆 4.起始的圆动起来, 5.起始的圆沿曲线走起来 6.起始的圆沿曲 ...