JZOJ 5457 项链

首先考虑旋转和颜色旋转
旋转可以看成置换群,为了方便,给出一下约定
( a 1 a 2 a 3 . . . a n 1 2 3 . . . n ) = ( a 1 , a 2 . . . a n ) \begin{pmatrix} a_1&a_2&a_3&...&a_n\\1&2&3&...&n\end{pmatrix}=(a_1,a_2...a_n) (a11a22a33......ann)=(a1,a2...an)
那么旋转可以这么搞,比如向右旋转一位就是 ( 2 , 3... n , 1 ) (2,3...n,1) (2,3...n,1)
然后发现所有的旋转操作组成了一个置换群
如果你不会Burnside引理那么你该先去学习一下
不考虑其他的,答案就是 1 n ∑ i = 1 n m gcd ⁡ ( i , n ) \displaystyle\frac{1}{n}\sum_{i=1}^nm^{\gcd(i,n)} n1i=1nmgcd(i,n)
为啥呢?
其实很简单,考虑旋转 i i i位的置换 ( 1 + i , 2 + i . . . ( n − i ) + i , 1 , 2... i ) (1+i,2+i...(n-i)+i,1,2...i) (1+i,2+i...(ni)+i,1,2...i)
它一共有 g c d ( n , i ) gcd(n,i) gcd(n,i)个循环。
什么是循环?就是把每个置换上下对应的边连上,然后看有多少个环。
假设有 k k k个环。
显然,照这样旋转 n n n就可以回到原来的样子。

然后……没有然后了?
错了,其实不用循环n次,只需要循环 n / k n/k n/k次(自己想想为什么)
所以 n / k ∗ i = n ∗ ? n/k*i=n*? n/ki=n?
所以可以得到 k = gcd ⁡ ( n , i ) k=\gcd(n,i) k=gcd(n,i)(自己想想为什么)
再考虑颜色旋转。
其实也不难,每个循环都告诉你了,那么每个循环的长度就是 n / k n/k n/k
然后根据刚才的套路,式子出来了,就是 1 n × m ∑ i = 1 n m k gcd ⁡ ( m , n / k ) \displaystyle\frac{1}{n\times m}\sum_{i=1}^nm^k\gcd(m,n/k) n×m1i=1nmkgcd(m,n/k),其中 k = gcd ⁡ ( n , i ) k=\gcd(n,i) k=gcd(n,i)
再考虑翻转配合颜色旋转。
什么,你可能会问为什么不用考虑翻转+旋转的情况。
哦,那是因为如果你可以发现最后只不过是换了一个轴来进行翻转操作。
是不是很妙?
然后化简完之后发现可以用Pollard Rho快速搞一搞,然后就没了。
留点给读者独立思考的机会吧……
马保国:中国武功讲究点到为止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值