首页 > 其他分享 >Burnside定理和Polya计数

Burnside定理和Polya计数

时间:2023-07-19 17:33:55浏览次数:37  
标签:ll 计数 定理 Polya include Burnside

置换群

Burnside定理和Polya计数都需要运用置换群的知识

置换群主要有三种运算,分别是合成运算、恒等置换、置换的逆

运用着三种运算就可以推导出Burnside定理和Polya计数的公式

Burnside定理

Burnside定理的主要应用是循环排列计数、项链计数、正五角形着色等

下面给出一道例题

P1446 [HNOI2008] Cards

通过Burnside定理可以推导出答案(r+g+b)!/(m+1)*r!*g!*b!

 代码:

#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int N = 2e2+39+7;
ll n,r,g,b,m,P,fac[N];
ll quickPow(ll a,ll b,ll n){
	ll ans=1;
	while(b){
		if(b&1)ans=(ans*a)%n;
		a=(a*a)%n;
		b>>=1;
	}
	return ans;
}
void Solvefac(){
	fac[0]=1;
	for(int i=1;i<=N-10;i++)fac[i]=fac[i-1]*i%P;
}
int main(){
	cin>>r>>b>>g>>m>>P;
	Solvefac();
	cout<<(fac[r+b+g])*(quickPow(fac[r]%P*fac[b]%P*fac[g]%P*(m+1)%P,P-2,P)%P)%P;
	return 0;
}

  

Polya计数

Polya计数与Burnside定理相似,但求解问题不同,Polya计数主要求解正方形着色与n边形着色问题

下面是一道关于n边形着色的例题

poj1286 Necklace of Beads

非常经典的Polya计数题目,通过旋转与翻转两种操作,分别计算就可以得出答案

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
ll n;
ll gcd(ll a,ll b){
	if(!b)return a;
	return gcd(b,a%b);
}
int main(){
	while(cin>>n&&n!=-1){
		if(n==0){
			cout<<0<<'\n';
			continue;
		}
		ll ans=0;
		for(ll i=0;i<n;i++)ans+=(ll)pow(3,gcd(n,i));
		if(n%2)ans+=n*(ll)pow(3,n/2+1);
		else{
			ans+=n/2*(ll)pow(3,n/2);
			ans+=n/2*(ll)pow(3,n/2+1);
		}
		cout<<ans/(n*2)<<'\n';
	}
	return 0;
}

  

标签:ll,计数,定理,Polya,include,Burnside
From: https://www.cnblogs.com/zhanghx-blogs/p/17566274.html

相关文章

  • JVM程序计数器
    JVM程序计数器1.介绍JVM中的程序计数寄存器(ProqramCounterRegister)中,Reqister的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序......
  • 常用的统计数学函数:sum, sd, mean, cv
    /************************************************************************@filemath.h*@ingroupmath*@authorwangqing*@date2020-05-14*@brief常用统计计算***********************************************************************/#ifndef__MATH_......
  • 【HMS Core】Health Kit 步数数据查询步骤咨询,血压/血氧的原子采样统计数据类型问题咨
    ​【问题描述】1、在进行步数查询---多日统计数据查询的时候,postman测试,发现了采样数据类型不匹配问题多日统计查询时,数据类型为 "com.huawei.continuous.steps.total"报错。反而数据类型为明细采样数据类型时“com.huawei.continuous.steps.delta”,正常返回。2、血压/血氧的......
  • 求质数:204. 计数质数
    https://leetcode.cn/problems/count-primes/204给定整数n,返回所有小于非负整数n的质数的数量。示例1:输入:n=10输出:4解释:小于10的质数一共有4个,它们是2,3,5,7。这题如果用对每个数i,让j从2遍历至sqrt(i)是否存在j,使得i%j==0(被j整除),是最容易的想到的,......
  • 图计数类问题·典
    一、无向图定向问题描述:给定一张\(n\)个点,\(m\)条边的的无向图,求给每条边定向后是DAG的方案数,对\(998244353\)取模。数据范围:\(1\len\le20\)。设\(f_S\)表示\(S\)点集中的点在DAG上时的方案数,枚举出度为\(0\)的点集\(T\),\(g(S)\)表示\(S\)能否成为出度......
  • 计数题目总结
    WC2019数树P4463国家集训队calc......
  • [刷题笔记] Luogu P4017 最大食物链计数
    ProblemDescription首先明确,最大食物链指生产者到顶级消费者(即最高营养级),而不是最长的食物链这样,我们就可以将题意转化为:在一张图中,求入度为0的点到出度为0的点路径数量这不妥妥的拓扑排序嘛(这题竟然在dp训练题单里,想了好久的dp)Solution虽说是拓扑排序,但并不完全是。我们......
  • Go--统计数组中重复的元素及重复次数
    代码:packagemainimport("fmt")funcmain(){//创建有重复数值的数组a1:=[]int{1,2,3,1,4,5,2}a2:=[]string{"t1","t2","t1","t3","t5","t3"}//创建maps1:=......
  • 【计数,DP】CF1081G Mergesort Strikes Back
    ProblemLink现有一归并排序算法,但是算法很天才,设了个递归深度上限,如果递归深度到达\(k\)则立即返回。其它部分都和正常归并排序一样,递归中点是\(\lfloor(l+r)/2\rfloor\),归并每次取两边较小者加入结果。给定\(n,k\),求用这个算法对一个均匀随机的排列\(p\)排序后,\(p\)......
  • 计数杂题
    搞一点计数题放在这,看到有意思的计数就更(虽然在组合数学那已经更了好多了)。[CTSC2017]吉夫特给定一个长度为\(n\)的序列\(a\),保证\(a_i\)互不相同。求出有多少个长度大于等于二的序列满足\[\prod_{i=2}^{k}\binom{a_{b_{i-1}}}{a_{b_i}}\bmod2=\binom{a_{b_1}}{a_{......