P4980-[模板]Pólya定理
正题
题目链接:https://www.luogu.com.cn/problem/P4980
题目大意
\(n\)个物品图上\(m\)种颜色,求在可以旋转的情况下本质不同的涂色方案。
解题思路
既然是群论基本题就顺便写一下刚刚了解到的相关知识把(顺便消磨一下时间
一个群\((G,\times )\)定义为一个在运算\(\times\)下满足以下条件的集合
- 封闭性:若存在\(a,b\in G\)那么有\(a\times b\in G\)
- 交换律:若有\(a,b,c\in G\)那么有\((a\times b)\times c=a\times (b\times c)\)
- 单位元:群中\(\exists e\in G\)满足\(\forall x\in G\)都有\(x\times e=x\)
- 逆元:对于\(\forall x\in G\)都有一个唯一元素\(y\in G\)且\(x\times y=e\)
然后中间一些东西很多很杂这里不多说了,直接到置换部分。
一般来说规定置换第一行为\((1,2,3...)\),那么定义一个置换\(\sigma=(g_1,g_2,g_3,...)\)。如果一个置换作用与一个排列\(a\),一般写为\(\sigma(a)=b\)的话,就有\(b_i=a_{g_i}\)。需要注意的是对于一个置换两次后相当与使用了另一个置换。(也就是置换只能生效一次
然后就是\(\text{Burnside}\)引理了,对于一个置换群\(G\),若\(G\)作用与一个集合\(X\)时,集合\(X\)中本质不同的元素个数为
\]
其中\(C(f)\)表示\(X\)的所有元素中对于置换\(f\)的不动点数量。
而\(\text{Polya}\)定理就是建立在\(\text{Burnside}\)引理上的,对于一个置换\(f\),定义它的循环节数量为\(T(f)\),用\(m\)种颜色染色时方本质不同的染色方案数就是
\]
也就是\(m^{T(f)}=C(f)\),这个很显然,因为每个循环节涂成一种颜色就是一个不动点。
回到这题的旋转来,我们可以将其视为\(n\)个不同的置换构成的一个置换群。对于旋转\(i\)步,它的循环节数量就是\(gcd(n,i)\),也就是我们要求
\]
枚举一下\(gcd(n,i)\)
\]
哦对啊好像有\(m=n\)
\]
这个时间复杂度大概是\(O(Tn^{\frac{3}{4}})\)的,但是因为约数个数远到不了\(\sqrt n\)所以你可以把它视为常数比较大的\(O(T\sqrt n)\)?
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll P=1e9+7;
ll T,n,ans;
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
ll phi(ll x){
ll ans=x;
for(ll i=2;i*i<=x;i++){
if(x%i)continue;
while(x%i==0)x/=i;
ans=ans/i*(i-1);
}
if(x>1)ans=ans/x*(x-1);
return ans;
}
ll calc(ll x)
{return phi(x)*power(n,n/x-1)%P;}
signed main()
{
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);ans=0;
for(ll i=1;i*i<=n;i++){
if(n%i)continue;
ans=(ans+calc(i))%P;
if(i*i!=n)ans=(ans+calc(n/i))%P;
}
printf("%lld\n",ans);
}
return 0;
}
P4980-[模板]Pólya定理的更多相关文章
- P4980 【模板】Polya定理
思路 polya定理的模板题,但是还要加一些优化 题目的答案就是 \[ \frac{\sum_{i=1}^n n^{gcd(i,n)}}{n} \] 考虑上方的式子怎么求 因为\(gcd(i,n)\) ...
- [洛谷P4980]【模板】Polya定理
题目大意:给一个$n$个点的环染色,有$n$中颜色,问有多少种涂色方案是的旋转后本质不同 题解:$burnside$引理:$ans=\dfrac1{|G|}\sum\limits_{g\in G}A_ ...
- 等价类计数:Burnside引理 & Polya定理
提示: 本文并非严谨的数学分析,有很多地方是自己瞎口胡的,仅供参考.有错误请不吝指出 :p 1. 群 1.1 群的概念 群 \((S,\circ)\) 是一个元素集合 \(S\) 和一种二元运算 $ ...
- [wikioi2926][AHOI2002]黑白瓷砖(Polya定理)
小可可在课余的时候受美术老师的委派从事一项漆绘瓷砖的任务.首先把n(n+1)/2块正六边形瓷砖拼成三角形的形状,右图给出了n=3时拼成的“瓷砖三角形”.然后把每一块瓷砖漆成纯白色或者纯黑色,而且每块瓷 ...
- HDU 3923 Invoker 【裸Polya 定理】
参考了http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 的模板 对于每一种染色,都有一个等价群,例如旋转, ...
- Necklace of Beads (polya定理的引用)
Beads of red, blue or green colors are connected together into a circular necklace of n beads ( n &l ...
- poj1286 Necklace of Beads—— Polya定理
题目:http://poj.org/problem?id=1286 真·Polya定理模板题: 写完以后感觉理解更深刻了呢. 代码如下: #include<iostream> #inclu ...
- poj2154 Color ——Polya定理
题目:http://poj.org/problem?id=2154 今天学了个高端的东西,Polya定理... 此题就是模板,然而还是写了好久好久... 具体看这个博客吧:https://blog.c ...
- Necklace of Beads(polya定理)
http://poj.org/problem?id=1286 题意:求用3种颜色给n个珠子涂色的方案数.polya定理模板题. #include <stdio.h> #include &l ...
- poj 1286 polya定理
Necklace of Beads Description Beads of red, blue or green colors are connected together into a circu ...
随机推荐
- SpringBoot-2-1-6-集成activiti7-1-0-M4
pom.xml <dependencyManagement> <dependencies> <dependency> <groupId>org.acti ...
- C# WCF的POST请求包含Stream及多个参数
当使用WCF的API的POST请求时,如果参数列表里,除了Stream类型形参,还具有多个形参, 在寄宿过程中会报错: 约定"IService1"中的操作"DoWork& ...
- The Programmer's Oath程序员的誓言----鲍勃·马丁大叔(Bob Martin)
In order to defend and preserve the honor of the profession of computer programmers, I Promise that, ...
- "排序二叉树"之探幽
/*怎么理解排序二叉树呢?在二叉树的基本定义上增加两个基本条件: (1)所有左子树的节点数值都小于此节点的数值: (2)所有右节点的数值都大于此节点的数值. */ 1 /*************** ...
- Map 综述(一):彻头彻尾理解 HashMap
转载自:https://blog.csdn.net/justloveyou_/article/details/62893086 摘要: HashMap是Map族中最为常用的一种,也是 Java Col ...
- rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...
- Node.js开发博客系统
数据库设计 用户表: id phone password nickname head_img personal_sign level_id create_time update_time is_del ...
- mysql最强
MYSQL 与mysql第一次亲密接触 数据库相关概念 一.数据库的好处 二.数据库的常见概念 ★ 三.数据库存储数据的特点 四.常见的数据库管理系统 MYSQL的介绍 一.MySQL的背景 二.My ...
- roscore启动不完全问题
运行roscore,得到如下日志,且一直卡着无法继续执行 ... logging to /home/xbit/.ros/log/79f2952c-589c-11ea-8213-d0abd5e7d222 ...
- DDL和客户端ip监控
DDL触发器监控脚本部署步骤 以下操作请使用sys用户: --第一步:创建表(此表主要保存ddl触发器产生的信息),可以根据不同的业务,使用相关的监控用户,在此监控用户为c##upctest 从可维护 ...