【SDOI2013】项链
2016-02-24 09:02
127 查看
题目描述
问满足以下要求的项链数有多少,答案对109+710^9+7取模,共TT组数据。项链由nn颗珠子构成。
每颗珠子为正三棱柱,每个侧面上都有一个正整数xx,满足x<mx,并且三个面上的数字的最大公约数为11。珠子被认为是相同的,当且仅当数字序列可以通过旋转或翻转相互得到。
相邻两颗珠子不可以相同。
两串项链假如可以通过旋转相互得到,那么是被认为是相同的。
n≤1014,m≤107,T≤10n\leq 10^14, m\leq 10^7, T\leq 10
分析
这道题结合了许多的数论知识。首先题目可以大体上分为两个部分:不同的珠子数、不同的项链数。
Part 1
如何求不同的珠子数呢?实际上珠子相当于一个三元组(x,y,z)(x, y, z),记不同珠子类型数为retret
这里珠子的所有置换构成置换群GG,那么根据burnsideburnside引理
ret=∑x∈Gf(d)|G|ret=\frac{\sum_{x\in G}f(d)}{|G|}
而通过暴力枚举GG的元素,我们可以发现GG中有11个置换由33个轮换组成,33个置换由22个轮换组成,22个置换由11个轮换组成。
那么问题就转化为了统计最大公约数为11的有序三元组、二元组及一元组数目。
以统计三元组为例:
考虑记gng_n表示最大公约数至少为nn的三元组数目。
记fnf_n表示最大公约数为nn的三元组数目。
gn=∑n|dfd=(⌊mn⌋)3g_n = \sum_{n|d} f_d=(\lfloor\frac{m}{n}\rfloor)^3
由前面写过的文章中
然而这个形式不仅仅局限于此,考虑以下等式。
F(n)=∑n|df(d)F(n)=\sum_{n|d}f(d)
那么
f(n)=∑n|dμ(dn)F(d)f(n)=\sum_{n|d}μ(\frac{d}{n})F(d)
也是成立的。
我们不妨倒过来想,原来的莫比乌斯反演是约数的形式,那么此时变成了倍数的形式以后基本思想还是不变的,上面的式子还是挺容易理解的。
可以得到这里的
fn=∑n|dμ(dn)gdf_n=\sum_{n|d}\mu(\frac{d}{n})g_d
特别的
f1=∑ni=1μ(i)gif_1=\sum_{i=1}^n\mu(i)g_i
于是再通过上面burnsideburnside引理的式子就可以计算不同的珠子类型数了。
gig_i是可以O(1)O(1)算的,重点是在于处理μ\mu
part 2
项链的旋转同构显然也构成了一个置换群G′G',且|G′|=n|G'|=n记不同的珠子类型数为pp。根据polyapolya定理,不同的项链数ansans
ans=∑d∈G′pf(d)|G′|ans=\frac{\sum_{d\in G'}p^{f(d)}}{|G'|}
其中G′G'中的置换f(k)f(k),其轮换数为(n,k)(n, k)
然而这里它存在对染色的限制:相邻的染色不能相同。
不妨记h(n)h(n)表示对nn组轮换染色的方案数。那么就有
h(n)=(p−1)h(n−2)+(p−2)h(n−1)h(n)=(p-1)h(n-2)+(p-2)h(n-1)
矩阵乘法即可。
然而我们直接枚举kk,每次都矩阵乘法显然是不行的。
考虑枚举gcdgcd,原式就变成了
∑ngcd=1h(gcd)φ(ngcd)\sum_{gcd=1}^n h(gcd)\varphi(\frac{n}{gcd})
因为gcdgcd必然是nn的约数,直接枚举约数,φ(ngcd)\varphi(\frac{n}{gcd})也可以顺便统计出来。
时间复杂度O(d(n)logn)O(d(n)logn),其中d(n)d(n)是nn的约数个数。
空间复杂度O(m)O(m)
相关文章推荐
- BMP 转 YUV (BMP2YUV)+ YUV 转RGB
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(2月24日)
- Qemu之Network Device全虚拟方案二:虚拟网卡的创建
- vim配置
- iOS 缓存机制
- 项目记录22-- tolua基于lua框架事件派发
- JavaScript鼠标拖拽特效及相关问题总结
- 九度题目1018(Hash)
- DPM(voc-release5) Matlab模型文件 Mat转XML
- matlab 输出汉字,解决英语系统乱码问题
- #define+do{} while(0)+peeror的思考
- IS 函数判断变量类型
- BMP 转 YUV (BMP2YUV)
- 全心全意为人民服务体如今我们软件设计上
- 正确编写概要设计说明书
- iOS海哥开发笔记 (海哥原创,常用的设计模式MVC,单例,代理,KVO)
- 初学scrapy之爬取wooyun.org网站
- 团队建设系列—制定流程规范
- IOS中 xib自定义View在storyboard中的使用
- LeetCode Group Shifted Strings