【SDOI2013】項鍊

題目描述

問滿足以下要求的項鍊數有多少,答案對109+7 取模,共T 組數據。

  • 項鍊由n 顆珠子構成。
  • 每顆珠子爲正三棱柱,每個側面上都有一個正整數x ,滿足x<m ,並且三個面上的數字的最大公約數爲1 。珠子被認爲是相同的,當且僅當數字序列可以通過旋轉或翻轉相互得到。
  • 相鄰兩顆珠子不可以相同。
  • 兩串項鍊假如可以通過旋轉相互得到,那麼是被認爲是相同的。

n1014,m107,T10


分析

這道題結合了許多的數論知識。
首先題目可以大體上分爲兩個部分:不同的珠子數、不同的項鍊數。

Part 1

如何求不同的珠子數呢?
實際上珠子相當於一個三元組(x,y,z) ,記不同珠子類型數爲ret
這裏珠子的所有置換構成置換羣G ,那麼根據burnside 引理

ret=xGf(d)|G|
而通過暴力枚舉G 的元素,我們可以發現G 中有1 個置換由3 個輪換組成,3 個置換由2 個輪換組成,2 個置換由1 個輪換組成。
那麼問題就轉化爲了統計最大公約數爲1 的有序三元組、二元組及一元組數目。

以統計三元組爲例:
考慮記gn 表示最大公約數至少爲n 的三元組數目。
fn 表示最大公約數爲n 的三元組數目。

gn=n|dfd=(mn)3

由前面寫過的文章中

然而這個形式不僅僅侷限於此,考慮以下等式。
F(n)=n|df(d)
那麼
f(n)=n|dμ(dn)F(d)
也是成立的。
我們不妨倒過來想,原來的莫比烏斯反演是約數的形式,那麼此時變成了倍數的形式以後基本思想還是不變的,上面的式子還是挺容易理解的。

可以得到這裏的

fn=n|dμ(dn)gd

特別的

f1=ni=1μ(i)gi

於是再通過上面burnside 引理的式子就可以計算不同的珠子類型數了。
gi 是可以O(1) 算的,重點是在於處理μ

part 2

項鍊的旋轉同構顯然也構成了一個置換羣G ,且|G|=n
記不同的珠子類型數爲p 。根據polya 定理,不同的項鍊數ans

ans=dGpf(d)|G|

其中G 中的置換f(k) ,其輪換數爲(n,k)
然而這裏它存在對染色的限制:相鄰的染色不能相同。
不妨記h(n) 表示對n 組輪換染色的方案數。那麼就有

h(n)=(p1)h(n2)+(p2)h(n1)
矩陣乘法即可。

然而我們直接枚舉k ,每次都矩陣乘法顯然是不行的。
考慮枚舉gcd ,原式就變成了

ngcd=1h(gcd)φ(ngcd)

因爲gcd 必然是n 的約數,直接枚舉約數,φ(ngcd) 也可以順便統計出來。

時間複雜度O(d(n)logn) ,其中d(n)n 的約數個數。
空間複雜度O(m)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章