[BZOJ3202][Sdoi2013]项链(数学)

本文详细探讨了BZOJ3202题目中的项链问题,涉及莫比乌斯反演、Polya计数、欧拉函数等数论算法。通过分析求解不同情况下的珠子方案数,提出优化策略降低复杂度,并给出计算技巧及代码实现,揭示数学在解决实际问题中的魅力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、分析

  • 莫比乌斯反演
  • Polya计数
  • 欧拉函数
  • 矩阵乘法
  • 特征根与通项公式
  • 组合数学
  • 逆元相关

出题人太厉害了!这道题真的是数学大融合啊!各种数论算法一起上场。。。。

二、求mm

m 是指有多少种不同的珠子。
如果不要求三个数的 gcdgcd 等于 11 ,那么 m 就是在 aa 个数中取出 3 个数( 33 个数可以相同,但像 1 2 3 213213 这两种只能算一种方案)的方案数。
也就是:

m=a×(a+1)×(a+2)6m=a×(a+1)×(a+2)6

下面都把 x×(x+1)×(x+2)6x×(x+1)×(x+2)6 记做 r(x)r(x)
如果要求三个数的 gcdgcd 等于 11 ,则方案数等于:
i = 1 a j = i + 1 a k = j + 1 a [ gcd ( i , j , k ) = 1 ]

这是一个明显的莫比乌斯反演!
整理后得到:
=i=1aj=i+1ak=j+1ad|gcd(i,j,k)μ(d)上式=∑i=1a∑j=i+1a∑k=j+1a∑d|gcd(i,j,k)μ(d)

=d=1ai=1,d|iaj=i+1,d|jak=j+1,d|kaμ(d)=∑d=1a∑i=1,d|ia∑j=i+1,d|ja∑k=j+1,d|kaμ(d)

=d=1a{ r(ad)×μ(d)}=∑d=1a{ r(⌊ad⌋)×μ(d)}

107107 的复杂度预处理 μ(d)μ(d) 的前缀和后,就能在 aa 的时间内求出 mm 了。

三、主要思想

如果不考虑相邻的两个珠子是否相同,则根据Polya计数,可以得到答案为:

1 n i = 1 n m gcd ( i , n )

而如果相邻的两个珠子必须不同,那么
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值