題目描述
問滿足以下要求的項鍊數有多少,答案對
- 項鍊由
n 顆珠子構成。 - 每顆珠子爲正三棱柱,每個側面上都有一個正整數
x ,滿足x<m ,並且三個面上的數字的最大公約數爲1 。珠子被認爲是相同的,當且僅當數字序列可以通過旋轉或翻轉相互得到。 - 相鄰兩顆珠子不可以相同。
- 兩串項鍊假如可以通過旋轉相互得到,那麼是被認爲是相同的。
分析
這道題結合了許多的數論知識。
首先題目可以大體上分爲兩個部分:不同的珠子數、不同的項鍊數。
Part 1
如何求不同的珠子數呢?
實際上珠子相當於一個三元組
這裏珠子的所有置換構成置換羣
而通過暴力枚舉
那麼問題就轉化爲了統計最大公約數爲
以統計三元組爲例:
考慮記
記
由前面寫過的文章中
然而這個形式不僅僅侷限於此,考慮以下等式。
F(n)=∑n|df(d)
那麼
f(n)=∑n|dμ(dn)F(d)
也是成立的。
我們不妨倒過來想,原來的莫比烏斯反演是約數的形式,那麼此時變成了倍數的形式以後基本思想還是不變的,上面的式子還是挺容易理解的。
可以得到這裏的
特別的
於是再通過上面
part 2
項鍊的旋轉同構顯然也構成了一個置換羣
記不同的珠子類型數爲
其中
然而這裏它存在對染色的限制:相鄰的染色不能相同。
不妨記
矩陣乘法即可。
然而我們直接枚舉
考慮枚舉
因爲
時間複雜度
空間複雜度