[JZOJ5457]项链

这道题目涉及群论和组合数学,主要讨论项链在旋转、翻转和颜色转换操作下的等价类计数问题。利用Burnside引理,结合大整数质因数分解、质数测试和模运算来解决这个问题。对于不同情况,如项链长度n和颜色种类m的不同范围,需要采用不同的计算策略。最后,给出了Pollard Rho算法用于大整数质因数分解,以及Miller-Rabin质数测试方法。
摘要由CSDN通过智能技术生成

现在有m 种颜色的珠子。定义一个长度为n的项链为一个顺次连接n个珠子的环, 将所有旋转和翻转看作是等价的。
比如说, [1,2,3,4]通过旋转等价于[2,3,4,1],[3,4,1,2], [4,1,2,3]; [1, 2,3,4] 通过翻转等价于[1,4,3,2], [3,2,1,4], [2,1,4,3],[4,3,2,1]。
同时, 你还可以进行一种颜色转换操作. 这种操作会将所有珠子的颜色编号加1, 特别地, 对于所有颜色编号为m的珠子, 它们的颜色编号会变为1。
如果一个项链A在经过任意的旋转, 翻转, 颜色转换之后变为了项链B,则称A和B是等价的。
现在你要统计有多少个本质不同的项链, 对998244353 取模。
对于前20%的数据, n,m<=7;
对于前30%的数据, n,m<=10^5;
对于前50%的数据, n,m<=10^9;
对于前70%的数据, n,m<=10^12;
对于100% 的数据, 1<=T<=20; 3<=n<=10^18; 2<=m<=10^18, 998244353 ∤ n,m。

分析

这道题题目就很明显是群论题了…扔在noip模拟,十分不友好…考试的时候经典做法忘大半,什么都推不出来。
这道题有三个置换,有两个十分熟悉,我们先来回顾一下这个经典置换做法:

burnside引理

前置知识是基本群论,网上应该很多资料。
设ans为本质不同的方案数,f是置换群G的一个置换, Ans=fGcnt(f)|G| 。cnt表示的是在置换f下的不动点的多少,不动点指的是无论用f置换多少次,这种方案跟原来还是一样的,比如一条染色为1,1,1的项链,对于置换f”旋转一次”是不动点,因为旋转一下还是1,1,1。注意这里枚举的置换一定要本质不同而且全部都被枚举到。

经典题目

考虑置换群G={旋转,翻转},n个珠子的项链,有m种颜色给你染。先考虑只有旋转,对于旋转i=0~n-1次,第x个点的颜色必须要和i+x的颜色一致,才能是不动点。考虑x和i+x连一条边,那么同一个联通块的点颜色都要一致。通过观察可以发现块数是gcd(n,i)(i=0可以看成i=n)。怎么思考呢?对于第一个点,我们考虑他所在的联通块大小,相当于1加了多少次i回到1这个点,即出现循环,那么就是方程 ix0(mod n) 的最小正整数解。这条式子看成是ix是n的倍数,那么x怎么小,都必须要有i中没有的,n的因子,也即 ngcd(i,n) ,那么联通块大小我们算出来了,联通块个数就用n除它即可。

再考虑翻转,很直观的想法是在旋转的基础上再考虑翻转或者不翻转,但这样很麻烦,我考场上忘记了,这样推搞了好久都不对。旋转+翻转可以看做是一条可以动的对称轴,那么对于n为奇数,对称轴可以穿过每一个点,穿过之后两边的对称点要取一样的颜色,那么考虑翻转的总方案数就是 nm[n2]+1 ;n为偶数偶数也差不多,n/2条可以插在两个珠子之间,n/2条可以穿过两个珠子(他们都是本质不同的),那么方案是 n2m[n2]+1+n2m[n2]
这样我们加入了翻转,本质不同的置换多了n个,置换群大小变成2n了。

到达本题

考虑加入换颜色的置换,有两种思路,一种是直接在原来的不动点统计中做些操作,置换群大小不变,但是统计方案变少。另一种是使置换群大小变成2*n*m,再看看怎么做。前者实践证明不太好做,考虑后者。
考虑旋转+颜色,设旋转i下,颜色+d,那么这种情况下,原来的一个联通块的特征有什么变化呢?我们发现,第x个和第x+i个的颜色差必须为d,考虑整个联通块,能够发现 d

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值