bzoj4314 倍数?倍数!加强版

本文探讨了在[1,n]区间内选取m个不同整数,使其和模n等于k的问题。通过引入单位根的概念,利用生成函数和单位根的性质,给出了求解方案数的具体公式。

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

问题:求[1,n][1,n][1,n]中选mmm个互不相同的数使得他们的和膜nnn等于kkk的方案数

Joker\texttt{Joker}Joker太神了!

题解:如果没有mmm的限制,实际上相当于求∏i=1n(1+xi)\prod_{i=1}^n (1+x^i)i=1n(1+xi)所有次数是膜nnnkkk的项的系数和
考虑用单位根来计算这个

可以发现,设F(x)=∏i=1n(1+xi)F(x)=\prod_{i=1}^n (1+x^i)F(x)=i=1n(1+xi),则答案为

ans=1n∑i=1nwn−ikF(wni)=1n∑i=1nwn−ik∏j=1n(1+wnij)\\ ans=\frac{1}{n}\sum_{i=1}^nw_n^{-ik}F(w_n^i)=\frac{1}{n}\sum_{i=1}^nw_n^{-ik}\prod_{j=1}^n(1+w_n^{ij}) ans=n1i=1nwnikF(wni)=n1i=1nwnikj=1n(1+wnij)

d=gcd(i,n)d=gcd(i,n)d=gcd(i,n),则wnij=wn/di/d∗jw_n^{ij}=w_{n/d}^{i/d*j}wnij=wn/di/dj,即

ans=1n∑i=1nwn−ik∏j=1n(1+wn/di/d∗j)=1n∑d∣n(∑j=1n/dwn−jdk[(j,n/d)=1])[∏j=1n/d(1+wn/dj)]d \\ ans=\frac{1}{n}\sum_{i=1}^nw_n^{-ik}\prod_{j=1}^n(1+w_{n/d}^{i/d*j})\\ \newline =\frac{1}{n}\sum_{d|n}(\sum_{j=1}^{n/d}w_n^{-jdk}[(j,n/d)=1])[\prod_{j=1}^{n/d}(1+w_{n/d}^j)]^d ans=n1i=1nwnikj=1n(1+wn/di/dj)=n1dn(j=1n/dwnjdk[(j,n/d)=1])[j=1n/d(1+wn/dj)]d
考虑单位根的定义,有

(xn−1)=∏(x−wni)(x^n-1)=\prod(x-w_n^i)(xn1)=(xwni)

x=1x=1x=1带入,并将wniw_n^iwni符号取反可得

∏(1+wni)=1−(−1)n\prod(1+w_n^i)=1-(-1)^n(1+wni)=1(1)n

即:
ans=1n∑d∣n(∑j=1n/dwn−jdk[(j,n/d)=1])[1−(−1)n/d]d \\ ans=\frac{1}{n}\sum_{d|n}(\sum_{j=1}^{n/d}w_n^{-jdk}[(j,n/d)=1])[1-(-1)^{n/d}]^d ans=n1dn(j=1n/dwnjdk[(j,n/d)=1])[1(1)n/d]d

f(d)=∑j=1n/dwn−jdk[(j,n/d)=1]f(d)=\sum_{j=1}^{n/d}w_n^{-jdk}[(j,n/d)=1]f(d)=j=1n/dwnjdk[(j,n/d)=1],考虑如何算这个,可以考虑容斥,令g(d)=∑j=1n/dwn−jdk=∑j=1n/dwn/d−jkg(d)=\sum_{j=1}^{n/d}w_n^{-jdk}=\sum_{j=1}^{n/d}w_{n/d}^{-jk}g(d)=j=1n/dwnjdk=j=1n/dwn/djk,则f(d)=g(d)−∑d∣x,x≠df(x)f(d)=g(d)-\sum_{d|x,x≠d}f(x)f(d)=g(d)dx,x̸=df(x)

考虑g(d)g(d)g(d),显然当n/d∣kn/d|kn/dkg(d)=n/dg(d)=n/dg(d)=n/d,否则g(d)=0g(d)=0g(d)=0,可以闭上眼睛感受一下,就是这些单位根转了一圈刚好抵消的样子。。。

考虑mmm的限制,其实直接改成F(x)=∏(1+xiy)F(x)=\prod(1+x^iy)F(x)=(1+xiy)即可,最后要求ymy^mym。所以最后的式子就这样子:

ans=1n∑d∣nf(d)[1−(−y)n/d]d\\ ans=\frac{1}{n}\sum_{d|n}f(d)[1-(-y)^{n/d}]^d ans=n1dnf(d)[1(y)n/d]d

枚举nnn的约数计算这个即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值