HDU 6439 Congruence equation(莫比乌斯反演)

2019-04-14 19:27发布

class="markdown_views prism-atom-one-light"> Description 给出一个长度为kk的序列A1,...,AkA_1,...,A_k,定义f(m)f(m)为满足以下条件的CC序列的数量: 1.若Ai=1A_i=-1CiC_i可以取[0,m)[0,m)中任意整数,否则Ci=Ai%mC_i=A_i\%m 2.同余方程i=1kCixi1(mod m)sumlimits_{i=1}^kC_ix_iequiv 1(mod m)有解 给出一整数nn,求m=1nf(m)sumlimits_{m=1}^nf(m) Input 第一行一整数TT​表示用例组数,每组用例首先输入两个整数k,nk,n​,之后输入一长度为kk​的序列AiA_i​ (1T250,1k50,1n109,1Ai109)(1le Tle 250,1le kle 50,1le nle 10^9,-1le A_ile 10^9) Output 输出答案,结果模109+710^9+7 Sample Input 2
5 10
-1 -1 8 -1 -1
3 20
-1 6 18 Sample Output Case #1: 24354
Case #2: 140 Solution 方程有解当且仅当gcd(C,m)=1gcd(C,m)=1,假设AA序列中已经确定值的gcdgcdgg,尚未确定的数字有xx个 1.若g0g eq 0,记f(d)f(d)为使得gcd(C,m)=dgcd(C,m)=d的序列CC的个数,F(d)F(d)为使得dgcd(C,m)d|gcd(C,m)的序列CC的个数,则显然有
F(d)=(md)x F(d)=(frac{m}{d})^x
且由F(d)=dif(i)F(d)=sumlimits_{d|i}f(i),莫比乌斯反演有
f(1)=dgcd(g,m)μ(d)F(d)=dgcd(g,m)μ(d)(md)x f(1)=sumlimits_{d|gcd(g,m)}mu(d)F(d)=sumlimits_{d|gcd(g,m)}mu(d)(frac{m}{d})^x
进而有
ans=m=1ndgcd(g,m)μ(d)(md)x=dgμ(d)i=1ndix=dgμ(d)S(nd,x) ans=sumlimits_{m=1}^nsumlimits_{d|gcd(g,m)}mu(d)(frac{m}{d})^x=sumlimits_{d|g}mu(d)sumlimits_{i=1}^{lfloorfrac{n}{d} floor}i^x=sumlimits_{d|g}mu(d)S(lfloorfrac{n}{d} floor,x)
其中S(n,k)=i=1ikS(n,k)=sumlimits_{i=1} i^k,通过伯努利序列即可O(k2)O(k^2)预处理O(k)O(k)得到S(n,k)S(n,k),那么该种情况即可O(xg)O(xsqrt{g})解决 2.若g=0g=0,将之前的式子稍作修改有
ans=m=1ndmμ(d)(md)x=d=1nμ(d)S(nd,x) ans=sumlimits_{m=1}^nsumlimits_{d|m}mu(d)(frac{m}{d})^x=sumlimits_{d=1}^nmu(d)S(lfloorfrac{n}{d} floor,x)