Pólya 定理学习笔记
在介绍\(Polya\) 定理前,先来介绍一下群论(大概了解一下就好):
群是满足下列要求的集合:
- 封闭性:即有一个操作使对于这个集合中每个元素操作完都使这个集合中的元素
- 结合律:即对于上面那个操作有结合律
- 单位元:对于\(a * e = a\)则称\(e\)是集合\(A\)对于操作\(*\)(并不一定是相乘)的逆元
- 逆元:即有\(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 定理学习笔记的更多相关文章
- Burnside引理与Polya定理 学习笔记
原文链接www.cnblogs.com/zhouzhendong/p/Burnside-Polya.html 问题模型 有一个长度为 $n$ 的序列,序列中的每一个元素有 $m$ 种取值. 如果两个序 ...
- Lucas定理学习笔记
从这里开始 一个有趣的问题 扩展Lucas算法 一个有趣的问题 题目大意 给定$n, m, p$,求$C_{n}^{m}$除以$p$后的余数. Subtask#1 $0\leqslant m\leq ...
- Master定理学习笔记
前言 \(Master\)定理,又称主定理,用于程序的时间复杂度计算,核心思想是分治,近几年\(Noip\)常考时间复杂度的题目,都需要主定理进行运算. 前置 我们常见的程序时间复杂度有: \(O(n ...
- Matrix_tree Theorem 矩阵树定理学习笔记
Matrix_tree Theorem: 给定一个无向图, 定义矩阵A A[i][j] = - (<i, j>之间的边数) A[i][i] = 点i的度数 其生成树的个数等于 A的任意n ...
- 生成树计数 Matrix-Tree 定理 学习笔记
一直都知道要用Matrix-Tree定理来解决生成树计数问题,但是拖到今天才来学.博主数学不好也只能跟着各位大佬博客学一下它的应用以及会做题,证明实在是不会. 推荐博客: https://www.cn ...
- Ploya定理学习笔记
由于自己的作息极其不规律导致比赛被打爆了 但是有的时候状态其实还行. 关于Ploya定理其实特别有意思 这里粘一个[dalao的blog](https://blog.csdn.net/lyc16355 ...
- Polya 定理 学习笔记
群 群的定义 我们定义,对于一个集合 \(G\) 以及二元运算 \(\times\),如果满足以下四种性质,那我们就称 \((G,\times)\) 为一个群. 1. 封闭性 对于 \(a\in G, ...
- 矩阵树定理&BEST定理学习笔记
终于学到这个了,本来准备省选前学来着的? 前置知识:矩阵行列式 矩阵树定理 矩阵树定理说的大概就是这样一件事:对于一张无向图 \(G\),我们记 \(D\) 为其度数矩阵,满足 \(D_{i,i}=\ ...
- [HEOI2015]小Z的房间(矩阵树定理学习笔记)
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...
随机推荐
- Flask 易错点
1.With上下文管理器 常用: with open("file_name","wb") as f: f.write("hello flask&quo ...
- jsonp和cors解决跨域
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.对于JSON大家应该是很了解了吧,不是很清楚的朋友可以去json.org上了解下,简单易懂. 1.什么是跨 ...
- Spring Security中配置AccessDeniedHandler没有生效
现象 在 WebSecurityConfigurerAdapter 配置了如下代码: // 自定义未授权和未登录异常 http.exceptionHandling() .accessDeniedHan ...
- 第七次Scrum Metting
日期:2021年5月5日 会议主要内容概述:前后端对接,以及接下来的测试优化等工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 测试数据模块和 ...
- linux下文件特殊权限设置位S和沾附位T(转载)
今天在创建文件的时候,发现了文件权限末尾有个T,之前没留意过,后来又用c创建(open)了两个文件来查看,在我没有指定权限(省略open的第三个参数)的时候,有时还会出现S,虽然还没弄懂什么时候会出现 ...
- linux 的 逻辑卷管理
lvm 逻辑卷管理器 关于逻辑卷管理lvm的一些操作 新建磁盘 sdcfdisk /dev/sdc 创建分区,更改分区id 为8e,改变分区类型为 lvm linux 创建物理卷与pv相关 pvcre ...
- k8s入坑之路(5)kube-apiserver详解
API Server kube-apiserver 是 Kubernetes 最重要的核心组件之一,主要提供以下的功能 提供集群管理的 REST API 接口,包括认证授权.数据校验以及集群状态变更等 ...
- 【pycharm】Python pip升级及升级失败解决方案,报错:You are using pip version 10.0.1, however version 21.3.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
我已经升级到了最新的版本 安装其他模块过程中出现下面提示,便说明你需要升级pip You are using pip version 10.0.1, however version 21.3.1 is ...
- 通俗易懂的HTML全知识梳理笔记(第一部分)
文章目录 什么是HTML 块级元素和内联元素 属性 给`a`元素添加属性 布尔属性 HTML的空白 实体引用: 在HTML中包含特殊字符 head中的元数据 meta元素 在你的站点中增加自定义的图标 ...
- LeetCode 113. 路径总和 II C++
提交结果:内存超100%,用时超69% /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo ...