计数:Burnside 引理和 Pólya 定理

满足以下条件的集合 \(G\) 在集合 \(G\) 的二元运算 \(\cdot\) 称为一个群:

  • 封闭性:若 \(a,b\in G\),则存在 \(a\in G\),使得 \(a\cdot b=c\)

  • 结合律:对于 \(\forall a,b,c \in G\),都有 \((a\cdot b)\cdot c=a\cdot(b\cdot c)\)

  • 存在单位元:\(G\) 中存在一个元素 \(e\),使得对于 \(\forall a\in G\),都有 \(a\cdot e=e\cdot a\)

  • 存在逆元:对于 \(\forall a\in G\),都有 \(b\in G\),使得 \(a\cdot b=b\cdot a=e\),记为 \(b=a^{-1}\)

置换群

钦定 \(n\) 个元素为 \(1,2,\cdots,n\),若以 \(a_1\in[1,n]\) 表示元素 \(1\),以 \(a_2\in[1,n]\) 表示元素 \(2\),……,以 \(a_n\in[1,n]\) 表示元素 \(n\),且 \(a\)\(1\sim n\) 的一个排列,则用

\[p=\left(\begin{array}{cc}1&2&3&\cdots&n \\a_1&a_2&a_3&\cdots&a_n \\ \end{array}\right)\]

表示一个置换。

置换的运算 \(p_1p_2\) 表示先做 \(p_1\) 的置换,再做 \(p_2\) 的置换,\(1,2,3,\cdots,n\) 的置换集合在该运算下是一个群,故称之为置换群。

循环

我们约定

\[(a_1a_2a_3\cdots a_n)=\left(\begin{array}{cc}a_1&a_2&a_3&\cdots&a_n\\a_2&a_3&a_4&\cdots&a_1\end{array}\right) \]

叫做 \(n\) 阶循环。

例如

\[\left(\begin{array}{cc}1&2&3&4&5\\4&3&1&5&2\end{array}\right)=(1\ 4\ 5\ 2\ 3) \]

\[\left(\begin{array}{cc}1&2&3&4&5\\3&1&2&5&4\end{array}\right)=(1\ 3\ 2)(4\ 5) \]

Burnside 引理

恶心重要的部分。

共轭类

我们约定一个置换分解后 \(k\) 阶循环出现的个数为 \(c_k\) 个,记为 \((k)^{c_k}\)

则一个置换群 \(S_n\) 中的置换可按分解成的格式 \((1)^{c_1}(2)^{c_2}\cdots(n)^{c_n}\) 的不同分类,其中若 \(c_i=0\),可省略 \((i)^{c_i}\) 不写。

\(S_n\) 中具有相同格式的置换全体,叫做与该格式相应的共轭类。

\(k\) 不动置换类

\(G\)\(1,2,3,\cdots,n\) 的置换群(也可以设为 \(S_n\) 的一个子群),若 \(k\in[1,n]\cap\mathbb Z\),则称 \(G\) 中使 \(k\) 不变的置换全体记为 \(Z_k\)\(G\) 中使 \(k\) 保持不动的置换类,简称 \(k\) 不动置换类。

例如 \(G=\{e,(2\ 3),(1\ 2)(3\ 4),(1\ 2\ 3),(2\ 3\ 4)\}\) 中使 \(1\) 不动的置换类 \(Z_1=\{e,(2,3),(2,3,4)\}\),其中 \(e\) 是单位元,\((2\ 3)\)\((1)(2\ 3)(4)\) 的缩写,下同。

等价类

P1. 对于给定的关于 \(1,2,3,\cdots,n\) 的置换群 \(G\),若存在置换 \(p\in G\) 使 \(k\) 变为 \(l\),则存在 \(p_2=p_1^{-1} \in G\) 使 \(l\) 变为 \(k\)\(e\) 使 \(k\) 变为 \(k\)

P2. 若存在 \(p_1\in G\) 使 \(k\) 变为 \(l\),又存在 \(p_2\) 使 \(l\) 变为 \(m\),则存在置换 \(p_3\in p_1p_2\in G\) 使 \(k\) 变为 \(m\),即对于

\[k \stackrel{p_1\in G}{\longrightarrow} l \stackrel{p_2\in G}{\longrightarrow} m \]

\[k \stackrel{p_3=p_1p_2\in G}{\longrightarrow} m \]

由 P1 和 P2 可知, \(k\)\(G\) 作用下的“轨迹”形成一个封闭的类,故 \(\{1,2,3,\cdots,n\}\) 中的数 \(k\),若存在置换 \(p_1\) 使 \(k\) 变为 \(l\),则称 \(k\)\(l\) 同属一个等价类。于是 \(1,2,3,\cdots,n\) 可按照 \(G\) 的置换分成若干个等价类,其中 \(k\) 所属的等价类记为 \(E_k\)

重要定理

定理 1

对于 \(\forall k \in [1,n]\cap\mathbb Z\) 都有 \(|E_k|\ |Z_k|=|G|\)

*证明

钦定 \(|E_k|=l\),不失一般性,设 \(E_k=\{a_1(=k),a_2,\cdots,a_l\}\)\(a_1,a_2,\cdots,a_l\)\(l\) 个不超过 \(n\) 的各不相同的正整数,由等价类的定义可知存在 \(p_i\in G\) 使得

\[k\stackrel{p_i}{\longrightarrow}a_i \]

其中 \(i\in[1,l]\cap\mathbb Z\)

\(P=\{p_1,p_2,\cdots,p_l\}\) 是属于 \(G\) 的置换集合但不是一个群。\(G_j=Z_kp_i\),其中 \(j\in[1,l]\cap\mathbb Z\)

由于

\[k\stackrel{p\in Z_k}{\longrightarrow}k\stackrel{p_j}{\longrightarrow}a_j \]

\[k\stackrel{pp_j=p'_j\in Z_kp_j}{\longrightarrow}a_j \]

同样地,\(j\in[1,l]\cap\mathbb Z\)

\(G_j=Z_kp_j\) 的元素属于 \(G\),而且当 \(i\ne j\) 时,\(G_i\cap G_j=\emptyset\)

\[G_1\sqcup G_2\sqcup G_3\sqcup \cdots \sqcup G_l \subseteq G \]

其中 \(A \sqcup B\) 表示不交并,即不相交集合 \(A\)\(B\) 的并集。

另一方面,对于 \(\forall p\in G\) 都有

\[k\stackrel{p}{\longrightarrow}a_j \]

依据 \(E_k\),存在 \(p_j\in G\),使得 \(k\stackrel{p_j}{\longrightarrow}a_j\),所以有

\[k\stackrel{p\in G}{\longrightarrow}a_j\stackrel{p_j^{-1}}{\longrightarrow}k \]

\[k\stackrel{pp_j^{-1}}{\longrightarrow}k \]

依据 \(Z_k\),有 \(pp_j^{-1}\in Z_k\),即 \(p\in Z_kp_j\),从而推出 \(p\in G_j\)

由于 \(p\)\(G\) 的任意元素,故

\[G\subseteq G_1\sqcup G_2\sqcup G_3\sqcup \cdots \sqcup G_l \]

\[G=G_1\sqcup G_2\sqcup G_3\sqcup \cdots \sqcup G_l \]

\[\begin{aligned}|G|&=\sum\limits_{i=1}^l|G_i|\\&=\sum\limits_{i=1}^l|Z_kp_i|\\&=l|Z_k|\\&=|E_k|\ |Z_k|\end{aligned} \]

证毕。

Burnside 引理

\(G\)\(N={1,2,3,\cdots,n}\) 上的置换群,\(G\)\(N\) 上可引出不同的等价类,其不同的等价类的个数为

\[l=\frac{\sum\limits_{i=1}^gc_1(a_i)}{|G|} \]

或者写成

\[|X/G|=\frac{\sum\limits_{g\in G}|X^g|}{|G|} \]

*证明

不妨作下表,表中的

\[s_{ij}=\begin{cases}1, j\stackrel{a_i\in Z_k}{\longrightarrow}j&\\0,j\stackrel{a_i\notin Z_k}{\longrightarrow}k\ne j\end{cases} \]

故第 \(i\) 行求和等于 \(c_1(a_i)\),第 \(j\) 列求和等于 \(|Z_k|\)

\[\sum\limits_{i=1}^{g}\sum\limits_{j=1}^{n}s_{ij}=\sum\limits_{j=1}^{n}|Z_j|=\sum\limits_{i=1}^g c_1(a_i) \]

\(\begin{array}{cc} & & j\\ & s_{ij}\\ a_i &\end{array}\) \(\begin{array}{cc}1&2&3&\cdots&n\end{array}\) \(c_1(a_i)\)
\(\begin{array}{cc}a_1\\a_2\\a_3\\\vdots\end{array}\\a_g\) \(\begin{array}{cc}s_{11}&s_{12}&s_{13}&\cdots&s_{1n}\\s_{21}&s_{22}&s_{23}&\cdots&s_{2n}\\s_{31}&s_{32}&s_{33}&\cdots&s_{3n}\\ & &\vdots\\s_{g1}&s_{g2}&s_{g3}&\cdots&s_{g_n}\end{array}\) \(\begin{array}{cc}c_1(a_1)\\c_1(a_2)\\c_1(a_3)\\\vdots\\c_1(a_g)\end{array}\)
\(\lvert Z'_j \rvert\) \(\begin{array}{cc}\lvert Z'_1 \rvert&\lvert Z'_2 \rvert&\lvert Z'_3 \rvert&\cdots&\lvert Z'_n \rvert\end{array}\) \(\sum\limits_{i=1}^gc_1(a_i)=\sum\limits_{j=1}^n\lvert Z'_j \rvert\)

我是绝对不会告诉你我一早上只画了这一张表的。

\(N=\{1,2,\cdots,n\}\) 分解为 \(l\) 个等价类:

\[N=E_1\sqcup E_2\sqcup E_3\sqcup \cdots E_l \]

\(j\)\(k\) 同属一个等价类时,有 \(|Z_j|=|Z_k|\),故

\[\sum\limits_{i=1}^n E_i=\sum\limits_{i=1}^{l}\sum_{j\in E_i} |Z_j|=\sum\limits_{i=1}^l \lvert E_i\rvert\ \lvert Z_i \rvert \]

由于 \(|E_i|\ |Z_i|=|G|\)\(i\in [1,l]\cap \mathbb Z\)),则有

\[\sum\limits_{i=1}^{n}|Z_i|=l|G| \]

\[l=\frac{\sum\limits_{i=1}^gc_1(a_i)}{|G|} \]

Pólya 定理

\(\bar G\)\(n\) 个对象的一个置换群,用 \(m\) 种颜色对 \(n\) 个对象染色,则不同的染色方案数为

\[l=\frac{\sum\limits_{i=1}^g m^{c(\bar a_i)}}{|\bar G|} \]

其中 \(\bar G={\bar a_1,\bar a_2,\bar a_3,\cdots,\bar a_g}\)\(c(\bar a_k)\) 为置换 \(a_k\) 的循环节数。

*证明

钦定 \(n\) 个对象用 \(m\) 种颜色进行涂色所得的方案集合为 \(S\),显然有 \(|S|=m^n\)

\(\bar G\) 的每一个元素 \(\bar a_{j}\) 对应于 \(n\) 个对象的一个排列,也对应了 \(S\) 中的 \(m^n\) 个涂色方案的一个排列,记作 \(a_j\)

这样,\(n\) 个对象上的群 \(\bar G\),对应于作用在 \(S\) 上的群 \(\bar G\),故

\[|G|=|\bar G| \]

且有 \(c_1(a_j)\)=\(m^{c(\bar a_j)}\),与前面的证法类似,可得 \(S\)\(G\) 分成不同等价类的个数为

\[\begin{aligned}l&=\frac{\sum\limits_{i=1}^{g}c_1(a_i)}{|G|}\\&=\frac{\sum\limits_{i=1}^{g}m^{c(\bar a_i)}}{|\bar G|}\end{aligned} \]

证毕。

*母函数形式的 Pólya 定理

众所周知 Pólya 定理不仅仅能够用来计数。

我们考虑将 Pólya 定理推广到母函数(生成函数)形式,以便对状态进行列举。

设有对象集合 \((a_1,a_2,a_3,a_4)\),用 \((c_1,c_2,c_3)\) \(3\) 种颜色来涂染,每个对象着一色,例如 \(a_1\)\(c_1\) 色,\(a_2\)\(c_3\) 色,\(a_3\)\(c_2\) 色,\(a_4\)\(c_1\) 色,规定对象顺序是 \(a_1a_2a_3a_4\),上述着色方案用 \(c_1c_3c_2c_1\) 表示。

如果我们不关心具体的对象涂染了什么颜色,只关心方案用了哪些颜色,我们可以进一步写成 \(c_1^2c_2c_3\)

例如使用蓝、绿、红、黄这 \(4\) 种颜色涂染 \(3\) 个同样的球,不妨记为 \(b,g,r,y\),所有方案可写为 \((b+g+r+y)^3\),由于 \(3\) 个球无区别,故乘法是可交换的。

\[\begin{aligned}(b+g+r+y)^3=\ &b^3+g^3+r^3+y^3+3b^2g+3b^2y+3g^2b+3g^2r\\&+ 3g^2y+3r^2b+3r^2g+3r^2y+3y^2g+3y^2r\\&+ 3y^2b+6bgr+6bgy+6brg+6gry\end{aligned} \]

展开式中的文字项表示方案,系数为方案的数目。

可把上面这种方法应用于 Pólya 定理。

设对 \(n\) 个对象用 \(m\) 种颜色 \(b_1,b_2,b_3,\cdots,b_n\) 进行着色,对应于置换 \(a_i\)\(k\)\(^\dag\)循环因子,其中 \(k\) 个对象,同一颜色用了 \(k\) 次,故在

\[l=\frac{\sum\limits_{i=1}^g m^{c(a_i)}}{|G|} \]

\(m^{c(a_i)}\) 项用

\[(b_1+b_2+b_3+\cdots+b_m)^{c_1(a_i)}(b_1^2+b_2^2+b_3^2+\cdots+b_m^2)^{c_2(a_i)}\\(b_1^3+b_2^3+b_3^3+\cdots+b_m^3)^{c_3(a_i)}\cdots(b_1^n+b_2^n+b_3^n+\cdots+b_m^n)^{c_n(a_i)} \]

引进循环指数多项式

\[P(G)=\frac{1}{G}\sum\limits_{i=1}^g\prod\limits_{i=1}^n s_k^{c_k(g_i)} \]

\(^\dag\)循环因子:一个置换分解成若干循环后的其中一个循环。

\[P(G)=\frac{1}{|G|}=[s_1^{c_1(a_1)}s_2^{c_2(a_1)}s_3^{c_3(a_1)}\cdots s_n^{c_n(a_1)}+s_1^{c_1(a_2)}s_2^{c_2(a_2)}s_3^{c_3(a_2)}\cdots s_n^{c_n(a_2)}+\cdots+s_1^{c_1(a_g)}s_2^{c_2(a_g)}s_3^{c_3(a_g)}\cdots s_n^{c_n(a_g)}] \]

其中 \(s_k=\sum\limits_{i=1}^m c_1^k\)\(k\in [1,n]\cap \mathbb Z\))。

证毕。

典例

UVA10733 The Colored Cubes

题目链接:洛谷 / UVa

题意:求给一个正方体的六个面涂上 \(n\) 种颜色的本质不同方案数。

前置知识:Burnside 引理和 Pólya 定理,可以看一下这篇

使正方体重合的刚体运动群,有如下几种情况:

  • 不动置换,即单位元素 \((1)(2)(3)(4)(5)(6)\),格式为 \((1)^6\)
  • 绕过面 \(\alpha_1\)\(\alpha_6\) 中心的 \(AB\) 轴旋转 \(\pm 90\degree\),对应有 \((1)(2\ 3\ 4\ 5)(6)\) 以及 \((1)(5\ 4\ 3\ 2)(6)\),如下图所示:

格式为 \((1)^2(4)^1\),正方体有三个对面,故同类置换有 \(6\) 个;

  • 绕上图中 \(AB\) 轴旋转 \(180\degree\) 的置换为 \((1)(2\ 4)(3\ 5)(6)\),格式为 \((1)^2(2)^2\),同类置换有 \(3\) 个;
  • 绕下图中 \(CD\) 轴旋转 \(180\degree\) 的置换为 \((1\ 6)(2\ 5)(3\ 4)\),格式为 \((2)^3\),正方体中对角线位置平行的棱有 \(6\) 对,故同类置换有 \(6\) 个;

  • 绕下图中 \(EF\) 旋转 \(\pm 120\degree\),对应有 \((3\ 4\ 6)(1\ 5\ 2)\) 以及 \((6\ 4\ 3)(5\ 2\ 1)\),格式为 \((3)^2\),正方体的对角线有 \(4\) 条,故同类置换有 \(8\) 个。

依据 Pólya 定理,

\[l=\frac{\sum\limits_{i=1}^{g}m^{c(\bar a_i)}}{|\bar G|} \]

于是不同染色方案数为

\[\begin{aligned} l&=\frac{1}{24}\times [n^6+6\times n^3+3\times n^4+6\times n^3+8\times n^2]\\&=\frac{n^6+3n^4+12n^3+8n^2}{24}\end{aligned} \]

P4980 【模板】Pólya 定理

题目链接:洛谷

依据 Pólya 定理,

\[l=\frac{\sum\limits_{i=1}^{g}m^{c(\bar a_i)}}{|\bar G|} \]

代入 \(|\bar G|=n\)\(c(\bar a_i)=\gcd(n,i)\)

\[l=\frac{\sum\limits_{i=1}^g m^{\gcd(n,i)}}{n} \]

改为枚举 \(\gcd\),令 \(f(i)=m^i\)

\[l=\frac{f * \varphi}{n} \]

其中 \(f*g\)\(f\)\(g\) 的 Dirichlet 卷积。

则有

\[\begin{aligned}l&=\frac{\sum\limits_{d\mid n}f(d)\varphi(\frac{n}{d})}{n}\\&=\frac{\sum\limits_{d\mid n}m^d\varphi(\frac{n}{d})}{n}\end{aligned} \]

代入 \(m=n\) 得到

\[l=\sum\limits_{d\mid n}n^{d-1}\varphi(\frac{n}{d}) \]

枚举 \(d\) 计算贡献即可,时间复杂度 \(O(n^{\frac{3}{4}})\)

int phi(int n)
{
	int ret=1;
	for(int i=2;i*i<=n;i++)
		if(n%i==0)
		{
			n/=i;
			ret*=(i-1);
			while(n%i==0)
			{
				n/=i;
				ret*=i;
			}
		}
	if(n>1)
		ret*=(n-1);
	return ret;
}
int polya(int m,int n)
{
	int ans=0;
	for(int i=1;i*i<=n;i++)
		if(n%i==0)
		{
			ans=(ans+phi(i)*quick_pow(m,n/i-1,mod)%mod)%mod;
			if(i*i!=n)
				ans=(ans+phi(n/i)*quick_pow(m,i-1,mod)%mod)%mod;
		}
	return ans;
}

图同构计数问题

P4727 [HNOI2009] 图的同构计数

题目链接:洛谷

问题相当于对 \(n\) 个无标志顶点的完全图的 \(\frac{n(n-1)}{2}\) 条边,用 \(2\) 种颜色(分别表示该边存在和不存在)进行着色,求不同方案数的问题。

先 dfs 枚举 \(n\) 的拆分再使用 Burnside 求解即可。

没有分析过程是因为我懒得写了。

void Burnside(int n,int b[])
{
	int k=0,prod=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<i;j++)
			k+=__gcd(b[i],b[j]);
	for(int i=1;i<=n;i++)
	{
		k+=b[i]>>1;
		prod=prod*b[i]%p;
	}
	for(int i=1,j;i<=n;i=j)
	{
		for(j=i;j<=n&&b[i]==b[j];j++)
			; // consecutive
		prod=prod*fac[j-i]%p;
	}
	ans=(ans+quick_pow(prod,p-2,p)*quick_pow(m,k,p)%p)%p;
}
int b[105];
void dfs(int cur,int l,int rst) // enum b
{
	if(rst<=0)
	{
		Burnside(cur-1,b); // Burnside
		return;
	}
	for(int i=l;i<=rst;i++)
	{
		b[cur]=i;
		dfs(cur+1,i,rst-i);
	}
}

另解:使用母函数形式的 Pólya 定理,但是我不太会。

*P4128 [SHOI2006] 有色图

题目链接:洛谷

和上一题差不多,把 \(2\) 换成 \(m\) 即可。

UVA11255 Necklace

题目链接:洛谷 / UVa

依据 Burnside 引理,

\[l=\frac{\sum\limits_{i=1}^gc_1(a_i)}{|G|} \]

显然对于本题我们需要求出 \(c_1(a_i)\)

我们考虑 \(c_1(a_i)\) 的意义,即在 \(a_i\) 作用下保持不动的元素个数。在本题中即为经过一次置换后前后状态本质相同的状态个数。

我们不采用题目中给定的 \(n\) 的定义,钦定数据组数为 \(t\),令 \(n=a+b+c\)

不妨先考虑旋转带来的影响。钦定经过某一种旋转置换后 \(d_{(i+k-1)\bmod n+1}\gets d_i\),即将第 \(i\) 颗珍珠旋转到第 \((i+k-1)\bmod n+1\) 的位置。

则该置换由 \(\gcd(n,k)\) 个长度相等的循环构成,即

\[p=(d_{1,1}\ d_{1,2}\ d_{1,3}\ \cdots\ d_{1,\gcd(n,k)})(d_{2,1}\ d_{2,2}\ d_{2,3}\ \cdots\ d_{2,\gcd(n,k)})\cdots(d_{\frac{n}{\gcd(n,k)},1}\ d_{\frac{n}{\gcd(n,k)},2}\ d_{\frac{n}{\gcd(n,k)},3}\ \cdots\ d_{\frac{n}{\gcd(n,k)},\gcd(n,k)}) \]

同时要保证 \(\forall i\in [1,\frac{n}{\gcd(n,k)}]\cap \mathbb Z\)\(j,k\in [1,\gcd(n,k)]\cap \mathbb Z\) 都有 \(d_{i,j}=d_{i,k}\),否则旋转后两个状态本质不同。

不妨令 \(t=\frac{n}{\gcd(n,k)}\),则一定有 \(t\mid a \land t\mid b\land t\mid c\),若不满足该条件,则无法保证每个环内的颜色相同,方案数为 \(0\)

考虑每种颜色的环有多少个。显然,白色环有 \(r_a=\frac{a}{t}\) 个,灰色环有 \(r_b=\frac{b}{t}\) 个,黑色环有 \(r_c=\frac{c}{t}\) 个。

考虑排列这些环的方案数,有

\[s=\frac{\gcd(n,k)!}{r_a!\times r_b!\times r_c!} \]

枚举 \(k\) 将贡献累加即可。

然后考虑翻转带来的影响。注意到 \(n\) 的奇偶性对翻转前后相同状态的数量以及翻转轴的位置有影响,考虑分类讨论。

\(n\) 为奇数时,显然所有翻转轴都是经过一颗珍珠和一段线,如下图所示。

而翻转轴共有 \(n\) 条,每一个置换的格式都为 \((1)^1(2)^{\frac{n-1}{2}}\),对经过的珍珠的颜色进行枚举并将贡献累加得到

\[s=n\sum\limits_{i=1}^3\frac{(\frac{n-1}{2})!}{(\frac{a-[i=1]}{2})!(\frac{b-[i=2]}{2})!(\frac{c-[i=3]}{2})!} \]

\(n\) 为偶数时,有 \(\frac{n}{2}\) 条翻转轴经过两颗珍珠,有 \(\frac{n}{2}\) 条翻转轴经过两段线,同样地,翻转轴有 \(n\) 条,每一个置换的格式都为 \((1)^2(2)^{\frac{n}{2}-1}\),枚举经过的珍珠的颜色,同样将贡献累加得到

\[s=n\sum_{i=1}^4\frac{(\frac{n}{2}-1)!}{(\frac{a-[i=2]-[i=3]}{2})!(\frac{b-[i=2]-[i=4]}{2})!(\frac{c-[i=3]-[i=4]}{2})!} \]

将所有贡献相加即为 \(\sum\limits_{i=1}^gc_1(a_i)\),而 \(|G|=2n\),二者相除即为最终答案,注意计算时可能溢出,尽量边乘边除。

void dv(__int128 &x,int &a,int &b)
{
	if(a)
		while(x%a==0)
		{
			x/=a--;
			if(!a)
				break;
		}
	if(b)
		while(x%b==0)
		{
			x/=b--;
			if(!b)
				break;
		}
}
__int128 f(int a,int b,int c,int x)
{
	if(a%x||b%x||c%x||a<0||b<0||c<0)
		return 0;
	a/=x;
	b/=x;
	c/=x;
	int n=a+b+c;
	__int128 ret=1;
	for(int i=n;i>a;i--)
	{
		__int128 tmp=i;
		dv(tmp,b,c);
		ret*=tmp;
		dv(ret,b,c);
	}
	return ret;
}
n=a+b+c;
for(int i=1;i<=n;i++)
{
  sum+=f(a,b,c,n/__gcd(i,n));
  ans+=sum/(n<<1);
  sum%=(n<<1);
}
if(n&1)
{
  sum+=(f(a-1,b,c,2)+f(a,b-1,c,2)+f(a,b,c-1,2))*n;
  ans+=sum/(n<<1);
  sum%=(n<<1);
}
else
{
  sum+=(f(a,b,c,2)+f(a-1,b-1,c,2)+f(a-1,b,c-1,2)+f(a,b-1,c-1,2))*n;
  ans+=sum/(n<<1);
  sum%=(n<<1);
}

编者按

带有*标记的为可跳过部分。

本文在 CSDN 和洛谷同步更新。后续会不会补充未知。

CSDN 链接:https://blog.csdn.net/yingjingxu/article/details/146433892

posted @ 2025-04-02 10:18  Amidst  阅读(131)  评论(3)    收藏  举报