要解决旋转相同或对称相同等的涂色问题,首先要知道burnside引理和polya定理。
polya定理:用m种颜色给长度为n的序列染色,不同的染色方案数等于
其中:
|G| 为置换方法总数
cgi 为第 i 种置换方法的循环节个数
而旋转
例如:对于序列 (1,2,3,4,5,6) ,旋转3个位置后,序列变为 (4,5,6,1,2,3) ,循环节为 (1 4)(2 5)(3 6) ,有 gcd(6,3)=3 个。
所以
然而很多题目中
n
都非常的大,可能会到
我们可以枚举这个gcd的值,只要枚举到 n√ 就可以了。
假设我们现在枚举到
t
,
这里的 ϕ(i) 就是欧拉函数。 ϕ(i) 表示 [1,i] 中和 i 互质的数的个数。
p
为素数时,
n=pk
且
p
为素数时,
n=p1∗p2 且 p1,p2 都是素数时, ϕ(n)=ϕ(p1)∗ϕ(p2) ,这是因为 ϕ(n) 为积性函数。
积性函数:若对于任意的互质的
m
和
这篇证明讲的很清楚,想知道的建议看看。
对于一个任意的正整数,都可以分解质因数成这样的形式:
则
ϕ(n)=ϕ(pk11pk22...pkrr)=ϕ(pk11)∗ϕ(pk22)∗...∗ϕ(pkrr)
=pk11pk22...pkrr(1−1p1)(1−1p2)...(1−1pr)
=n(1−1p1)(1−1p2)...(1−1pr)
所以最后总的染色方案数为 L=∑n|tnt−1ϕ(nt)