在介绍\(Polya\) 定理前,先来介绍一下群论(大概了解一下就好):

群是满足下列要求的集合:

  1. 封闭性:即有一个操作使对于这个集合中每个元素操作完都使这个集合中的元素
  2. 结合律:即对于上面那个操作有结合律
  3. 单位元:对于\(a * e = a\)则称\(e\)是集合\(A\)对于操作\(*\)(并不一定是相乘)的逆元
  4. 逆元:即有\(a * b = b * a = e\)对于元素\(a\)有逆元

    置换群:

    考虑这样的一个全置换集合,可以验证该集合为群。(置换不懂的话建议右转百度,这里不细说)

接下来介绍\(Burnside\)定理

对于一类染色问题,并统计在一些操作下的本质不同方案数有这样一个公式:

我们把所有的操作(类似于顺时针旋转,对称等等)写成一个置换群

则有答案为:

\(ans = \frac{1}{cnt}\sum_{f \in G}p(f)\)

其中\(p(f)\)指的是在该置换下不变的染色方案数。

举例有:

一个大小\(5\)的环,顺时针旋转了\(144\)度的置换为:

\(
\begin{pmatrix}
1&2&3&4&5\\
4&5&1&2&3
\end{pmatrix}
\)

以两种颜色染色则有:

\(
\begin{pmatrix}
1&1&1&1&1
\end{pmatrix}
\)

\(
\begin{pmatrix}
0&0&0&0&0
\end{pmatrix}
\)

两种方案满足对该置换不动。

接下来介绍\(Polya\)定理

考虑把置换写成循环的形式

\(
\begin{pmatrix}
1&2&3&4\\
1&2&3&4
\end{pmatrix}
\)

写作:\((1)(2)(3)(4)\)

\(
\begin{pmatrix}
1&2&3&4\\
3&4&1&2
\end{pmatrix}
\)

写作:\((1\ 3)(2\ 4)\)

则有\(Polya\)定理\(ans = \frac{1}{cnt}\sum_{f \in G}k^{m(f)}\)

\(k\)为染色数,\(m(f)\)为该置换拆解成的循环数。

【模板】Pólya 定理

考虑写出置换后,易证得顺时针旋转\(k\)次的置换的循环为\(gcd(n,k)\)

则有\(ans = \frac{1}{n}\sum_i^n n^{gcd(n,i)}\)

这样复杂度不在承受范围内,考虑枚举\(gcd(n,i)\)

\(ans = \frac{1}{n}\sum_{L|n} n^{L} * \varphi(\frac{n}{L})\)

这样就能在根号里做出答案了。

【模板】Pólya 定理
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
#define mod 1000000007 ll T,n; inline ll pow(ll a,ll b){
ll ans = 1;
while(b){
if(b & 1) ans = 1ll * ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans % mod;
} inline ll phi(int now){
int ans = now;
for(int i = 2;i * i <= now;++i){
if(now % i)continue;
ans = ans - ans / i;
while(now % i == 0)
now /= i;
}
if(now != 1)
ans = ans - ans / now;
return ans % mod;
} inline ll get(int now){ll ans = phi(n / now) * pow(n,now) % mod;} int main(){
scanf("%lld",&T);
while(T -- ){
scanf("%lld",&n);
ll ans = 0;
for(int i = 1;i * i <= n;++i){
if(n % i == 0){
ans = (ans + get(i)) % mod;
if(n / i != i)
ans = (ans + get(n / i)) % mod;
}
}
std::cout<<ans * pow(n,mod - 2) % mod<<std::endl;
}
}

Pólya 定理学习笔记的更多相关文章

  1. Burnside引理与Polya定理 学习笔记

    原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...

  2. Lucas定理学习笔记

    从这里开始 一个有趣的问题 扩展Lucas算法 一个有趣的问题 题目大意 给定$n, m, p$,求$C_{n}^{m}$除以$p$后的余数. Subtask#1  $0\leqslant m\leq ...

  3. Master定理学习笔记

    前言 \(Master\)定理,又称主定理,用于程序的时间复杂度计算,核心思想是分治,近几年\(Noip\)常考时间复杂度的题目,都需要主定理进行运算. 前置 我们常见的程序时间复杂度有: \(O(n ...

  4. Matrix_tree Theorem 矩阵树定理学习笔记

    Matrix_tree Theorem: 给定一个无向图, 定义矩阵A A[i][j] = - (<i, j>之间的边数) A[i][i] = 点i的度数 其生成树的个数等于 A的任意n ...

  5. 生成树计数 Matrix-Tree 定理 学习笔记

    一直都知道要用Matrix-Tree定理来解决生成树计数问题,但是拖到今天才来学.博主数学不好也只能跟着各位大佬博客学一下它的应用以及会做题,证明实在是不会. 推荐博客: https://www.cn ...

  6. Ploya定理学习笔记

    由于自己的作息极其不规律导致比赛被打爆了 但是有的时候状态其实还行. 关于Ploya定理其实特别有意思 这里粘一个[dalao的blog](https://blog.csdn.net/lyc16355 ...

  7. Polya 定理 学习笔记

    群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...

  8. 矩阵树定理&BEST定理学习笔记

    终于学到这个了,本来准备省选前学来着的? 前置知识:矩阵行列式 矩阵树定理 矩阵树定理说的大概就是这样一件事:对于一张无向图 \(G\),我们记 \(D\) 为其度数矩阵,满足 \(D_{i,i}=\ ...

  9. [HEOI2015]小Z的房间(矩阵树定理学习笔记)

    题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...

随机推荐

  1. Clusternet v0.5.0 重磅发布: 全面解决多集群应用分发的差异化配置难题

    作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在做多集群应用分发的时候,经常会遇到以下的差异化问题,比如: 在分发的资源上全部打上统一的标签,比如 apps.my.compan ...

  2. python反序列化1(__reduce__)

    part1:不求甚解的复现 对于服务端源码:    编写恶意序列化对象生成程序: 将生成的恶意序列化对象输入服务端user,使其执行系统命令.(上面那俩其实都行) part2:原理解释 b'xxx'是 ...

  3. Jupyter Notebook配置多个kernel

    Jupyter Notebook配置多个kernel 前言: 在anaconda下配置了多个环境,而Jupiter Notebook只是安装在base环境下,为了能在Jupiter Notebook中 ...

  4. TVS管性能及选型总结

    https://wenku.baidu.com/view/5b5bda5526fff705cc170af8.html

  5. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  6. 稳了!我准备了1个晚上的CMS垃圾收集器

    面试官:今天还是来聊聊CMS垃圾收集器呗? 候选者:嗯啊... 候选者:如果用Seria和Parallel系列的垃圾收集器:在垃圾回收的时,用户线程都会完全停止,直至垃圾回收结束! 候选者:CMS的全 ...

  7. 基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验

    1:PWM脉冲宽度调制 STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定 ...

  8. 设计系统(Design System),设计和开发之间的“DevOps”

    最近,我们网站的上新增了几个新功能,比如通过导航栏的QR Code可以下载App:通过Carousel的方式,显示多条信息. 以往这样的功能可能需要2-3个Sprints完成,但是现在这些功能都是在一 ...

  9. 大一C语言学习笔记(1)---编译顺序问题;不同数据类型赋值,运算问题;算数运算符易错点(以解一元二次方程为例)

    废话少说,上代码: #include<stdio.h> #include<math.h> int main()//解一元二次方程 { int a,b,c; double too ...

  10. 你会用ES6,那倒是用啊!

    leader的吐槽大会(在代码评审中发现很多地方还是采用ES5的写法,也不是说用ES5写法不行,会有BUG,只是造成代码量增多,可读性变差而已.) ps:ES5之后的JS语法统称ES6!!! 一.关于 ...