问题:求[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)所有次数是膜nnn为kkk的项的系数和
考虑用单位根来计算这个
可以发现,设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=1∑nwn−ikF(wni)=n1i=1∑nwn−ikj=1∏n(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/d∗j,即
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=1∑nwn−ikj=1∏n(1+wn/di/d∗j)=n1d∣n∑(j=1∑n/dwn−jdk[(j,n/d)=1])[j=1∏n/d(1+wn/dj)]d
考虑单位根的定义,有
(xn−1)=∏(x−wni)(x^n-1)=\prod(x-w_n^i)(xn−1)=∏(x−wni)
把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=n1d∣n∑(j=1∑n/dwn−jdk[(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/dwn−jdk[(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/dwn−jdk=∑j=1n/dwn/d−jk,则f(d)=g(d)−∑d∣x,x≠df(x)f(d)=g(d)-\sum_{d|x,x≠d}f(x)f(d)=g(d)−∑d∣x,x̸=df(x)
考虑g(d)g(d)g(d),显然当n/d∣kn/d|kn/d∣k时g(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=n1d∣n∑f(d)[1−(−y)n/d]d
枚举nnn的约数计算这个即可。