因为github上不支持对数学公式的渲染,所以就放到了csdn上,感觉还不错.(持续更新)
Number Theory
(目录坏掉了TAT)
- FFT
- 线性筛
- 莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k] ∑i=1n∑j=1m[gcd(i,j)==k]
- 莫比乌斯反演: ∑ b 1 = 1 a 1 ∑ b 2 = 1 a 2 . . . ∑ b n = 1 a n [ gcd ( b 1 , b 2 , . . . , b n ) ≥ 2 ] \sum_{b_1=1}^{a_1}\sum_{b_2=1}^{a_2}...\sum_{b_n=1}^{a_n}[\gcd(b_1,b_2,...,b_n)\geq 2] ∑b1=1a1∑b2=1a2...∑bn=1an[gcd(b1,b2,...,bn)≥2]
- 莫比乌斯反演: ∑ k = 1 ∞ ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k 2 ] \sum_{k=1}^\infty\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k^2] ∑k=1∞∑i=1n∑j=1m[gcd(i,j)==k2]
- 莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m gcd ( i , j ) \sum_{i=1}^n\sum_{j=1}^m\gcd(i,j) ∑i=1n∑j=1mgcd(i,j)
- 莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j) ∑i=1n∑j=1mlcm(i,j)
- 莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m d ( i j ) \sum_{i=1}^n\sum_{j=1}^md(ij) ∑i=1n∑j=1md(ij)
- 莫比乌斯反演: ∑ i = 1 n [ i 不 含 有 平 方 因 子 ] \sum_{i=1}^n[i不含有平方因子] ∑i=1n[i不含有平方因子]
文章目录
- Number Theory
- FFT
- 线性筛
- 莫比乌斯反演:$\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k]$
- 莫比乌斯反演:$\sum_{b_1=1}^{a_1}\sum_{b_2=1}^{a_2}...\sum_{b_n=1}^{a_n}[\gcd(b_1,b_2,...,b_n)\geq 2]$
- 莫比乌斯反演:$\sum_{k=1}^\infty\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k^2]$
- 莫比乌斯反演:$\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)$
- 莫比乌斯反演:$\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)$
- 莫比乌斯反演:$\sum_{i=1}^n\sum_{j=1}^md(ij)$
- 莫比乌斯反演:$\sum_{i=1}^n[i不含有平方因子]$
FFT
FFT有很多形式,但最终都可以归结到这一种:
h = f ⊗ g : h ( x ) = ∑ i = 0 x f ( i ) × g ( x − i ) h=f⊗g:h(x)=\sum_{i=0}^xf(i)\times g(x-i) h=f⊗g:h(x)=i=0∑xf(i)×g(x−i)
hdu1402 f[i]=s’[i]-‘0’,g[i]=t’[i]-‘0’,h=f⊗g,逆序输出h[i],h[i]含义:第i位乘积和 AC代码
bzoj3527 f [ f l e n − 1 − i ] = q i , g [ i ] = 1 ( n − 1 − i ) × ∣ n − 1 − i ∣ , g [ n − 1 ] = 0. f[flen-1-i]=q_i,g[i]=\frac{1}{(n-1-i)\times|n-1-i|},g[n-1]=0. f[flen−1−i]=qi,g[i]=(n−1−i)×∣n−1−i∣1,g[n−1]=0. AC代码
h = f ⊗ g , h [ k + f l e n − 1 ] = ∑ i = 0 f l e n − 1 f [ f l e n − 1 − i ] g [ i + k ] h=f⊗g,h[k+flen-1]=\sum_{i=0}^{flen-1}f[flen-1-i]g[i+k] h=f⊗g,h[k+flen−1]=i=0∑flen−1f[flen−1−i]g[i+k]
uvalive6886 f[0]=1,f[a[i]]=1,h=f⊗f,f[i]的含义是走0或1步到达i的方案数,h[i]的含义是走0~2步到达i的方案数 AC代码hdu4609 f[a[i]]=c[i]代表有c[i]个方案选出长度为a[i]树枝,h=f⊗f,h[i] :选两个树枝长度为i有多少种方案 AC代码
直接的h[i]=(b,c)的方案数,a是待会要枚举的a[i],b和c是被加的树枝长,需要减去一些东西
1.减去b=c情况,即枚举每根树枝h[a[i]*2]–
2.减去b>c情况,即每一个h[i]/=2
剩下的就是b<c的情况,枚举a[i],假设a>c,总数为
∑ i = a [ i ] + 1 ∞ h [ i ] \sum_{i=a[i]+1}^\infty{h[i]} ∑i=a[i]+1∞h[i]
,需要减去如下情况1.a=b<c 或 b<a=c,一共有n-1种情况
2.a<b<c,一共有
C n − 1 − i 2 = ( n − 1 − i ) ( n − 2 − i ) 2 C_{n-1-i}^2=\frac{(n-1-i)(n-2-i)}{2} Cn−1−i2=2(n−1−i)(n−2−i)
种情况3.b<a<c,一共有i*(n-1-i)种情况
把所有情况数相加就是答案
uvalive4671 求A串中alen-blen+1个长如B串的子串和B串的Hamming距离小于等于k的种数 AC代码
首先需要求出a串中长如B串的子串们与B串的Hamming距离
定 义 f ( x ) 是 a 串 中 以 x 为 起 始 下 标 长 如 B 串 的 子 串 与 B 串 的 H a m m i n g 距 离 定义f(x)是a串中以x为起始下标长如B串的子串与B串的Hamming距离 定义f(x)是a串中以x为起始下标长如B串的子串与B串的Hamming距离
即 f ( x ) = ∑ i = 0 b l e n − 1 [ A ( x + i ) ! = B ( i ) ] 即f(x)=\sum_{i=0}^{blen-1}[A(x+i)!=B(i)] 即f(x)=i=0∑blen−1[A(x+i)!=B(i)]
设 i = b l e n − 1 − i , C : r e v e r s e ( B , B + b l e n ) , そ れ で は 那 么 设i=blen-1-i,C:reverse(B,B+blen),\frac{それでは}{那么} 设i=blen−1−i,C:reverse(B,B+blen),那么それでは
f ( x ) = ∑ b l e n − i = 0 b l e n − 1 [ A ( x + b l e n − 1 − i ) ! = B ( b l e n − 1 − i ) ] f(x)=\sum_{blen-i=0}^{blen-1}[A(x+blen-1-i)!=B(blen-1-i)] f(x)=blen−i=0∑blen−1[A(x+blen−1−i)!=B(blen−1−i)]
f ( x ) = ∑ i = 0 b l e n − 1 [ A ( x + b l e n − 1 − i ) ! = C ( i ) ] , 根 据 F F T 形 式 有 : f(x)=\sum_{i=0}^{blen-1}[A(x+blen-1-i)!=C(i)],根据FFT形式有: f(x)=i=0∑blen−1[A(x+blen−1−i)!=C(i)],根据FFT形式有:
f ( x ) = ( A ⊗ C ) ( x + b l e n − 1 ) f(x)=(A⊗C)(x+blen-1) f(x)=(A⊗C)(x+blen−1)
现 在 的 问 题 是 如 何 计 算 A ⊗ C , 可 以 拆 分 为 两 个 卷 积 的 和 : 现在的问题是如何计算A⊗C,可以拆分为两个卷积的和: 现在的问题是如何计算A⊗C,可以拆分为两个卷积的和:
A ⊗ C = ( a ( i ) = = ′ a ′ ) ⊗ ( b ( i ) = = ′ b ′ ) + ( a ( i ) = = ′ b ′ ) ⊗ ( b ( i ) = = ′ a ′ ) A⊗C=(a(i)=='a')⊗(b(i)=='b')+(a(i)=='b')⊗(b(i)=='a') A⊗C=(a(i)==′a′)⊗(b(i)==′b′)+(a(i)==′b′)⊗(b(i)==′a′)然后在用字符串Hash求不重复合法子串个数(不是重点,见代码)
jisuanke26219 剪刀石头布加强版,小串最多赢大串几次 AC代码
定 义 w i n n u m ( x , y , z ) = ( a ( i ) = = x ) ⊗ ( b ( i ) = = y ) ( z + a l e n − 1 ) , a 是 小 串 定义winnum(x,y,z)=(a(i)==x)⊗(b(i)==y)(z+alen-1),a是小串 定义winnum(x,y,z)=(a(i)==x)⊗(b(i)==y)(z+alen−1),a是小串
x = " S L P K R S L P K R " , y = " P P R R L L K K S S " , 根 据 游 戏 规 则 所 得 x="SLPKRSLPKR",y="PPRRLLKKSS",根据游戏规则所得 x="SLPKRSLPKR",y="PPRRLLKKSS",根据游戏规则所得
则 A n s = max i = 0 b l e n − a l e n + 1 { ∑ j = 0 9 w i n n u m ( x [ j ] , y [ j ] , i ) } 则Ans=\max_{i=0}^{blen-alen+1}\{\sum_{j=0}^9winnum(x[j],y[j],i)\} 则Ans=i=0maxblen−alen+1{j=0∑9winnum(x[j],y[j],i)}克制关系见下图:(S:紫剪刀,K:蓝斯波克,L:绿蜥蜴,R:粉石头,P:黄布)
cf954i 最小次数本质是求6点图的联通分量个数,用30次FFT和并查集来确定答案,每一个答案是a的子串和b串对应位置的两个点相连之后,6-联通块数量. AC代码 推荐博客的第6个题,说的很明白
bzoj4827 求的是 min C = − m m { min k = 0 l e n − 1 { ∑ i = 0 l e n − 1 x i 2 + y i + k 2 − 2 x i y i + k + C 2 + 2 C x i − 2 C y i + k } } \min_{C=-m}^m\{\min_{k=0}^{len-1}\{\sum_{i=0}^{len-1}x_i^2+y_{i+k}^2-2x_iy_{i+k}+C^2+2Cx_i-2Cy_{i+k}\}\} minC=−mm{mink=0len−1{∑i=0len−1xi2+yi+k2−2xiyi+k+C2+2Cxi−2Cyi+k}} AC代码
由于 y 0 + k 到 y l e n − 1 + k y_{0+k}到y_{len-1+k} y0+k到ylen−1+k的数字和 y 0 到 y l e n − 1 y_0到y_{len-1} y0到ylen−1的数字只是顺序上的差别,因此有:
A n s = min C = − m m { min k = 0 l e n − 1 { ∑ i = 0 l e n − 1 x i 2 + y i 2 − 2 x i y i + k + C 2 + 2 C x i − 2 C y i } } Ans=\min_{C=-m}^m\{\min_{k=0}^{len-1}\{\sum_{i=0}^{len-1}x_i^2+y_i^2-2x_iy_{i+k}+C^2+2Cx_i-2Cy_i\}\} Ans=C=−mminm{k=0minlen−1{i=0∑len−1xi2+yi2−2xiyi+k+C2+2Cxi−2Cyi}}
A n s = ∑ i = 0 l e n − 1 ( x i 2 + y i 2 ) − 2 max k = 0 l e n − 1 { ∑ i = 0 l e n − 1 x i y i + k } + min C = − m m { l e n × C 2 + 2 C ∑ i = 0 l e n − 1 ( x i − y i ) } Ans=\sum_{i=0}^{len-1}(x_i^2+y_i^2)-2\max_{k=0}^{len-1}\{\sum_{i=0}^{len-1}x_iy_{i+k}\}+\min_{C=-m}^m\{len\times C^2+2C\sum_{i=0}^{len-1}(x_i-y_i)\} Ans=i=0∑len−1(xi2+yi2)−2k=0maxlen−1{i=0∑len−1xiyi+k}+C=−mminm{len×C2+2Ci=0∑len−1(xi−yi)}
其中 ∑ i = 0 l e n − 1 ( x i 2 + y i 2 ) \sum_{i=0}^{len-1}(x_i^2+y_i^2) ∑i=0len−1(xi2+yi2) 和 ∑ i = 0 l e n − 1 ( x i − y i ) \sum_{i=0}^{len-1}(x_i-y_i) ∑i=0len−1(xi−yi) O(n)能算,
关键是 max k = 0 l e n − 1 { ∑ i = 0 l e n − 1 x i y i + k } \max_{k=0}^{len-1}\{\sum_{i=0}^{len-1}x_iy_{i+k}\} maxk=0len−1{∑i=0len−1xiyi+k}如何使用FFT计算
设x:rev(x,x+len),则上式可写成 max k = 0 l e n − 1 { ∑ i = 0 l e n − 1 x l e n − 1 − i y i + k } \max_{k=0}^{len-1}\{\sum_{i=0}^{len-1}x_{len-1-i}y_{i+k}\} maxk=0len−1{∑i=0len−1xlen−1−iyi+k}
即 max k = 0 l e n − 1 { x ⊗ y ( l e n − 1 + k ) } \max_{k=0}^{len-1}\{x⊗y(len-1+k)\} maxk=0len−1{x⊗y(len−1+k)} ,O(nlogn)能算
NAIPC2016E f(i)=s(len-1-i),g(i)=s(i),h=f⊗g,依次输出h[i], i ∈ [ l e n , 2 l e n − 2 ] i\in[len,2len-2] i∈[len,2len−2],h[i+len-1]就是距离为i的逆序对个数 AC代码
线性筛
nowcoder27E f = i d k × μ f=id^k\times\mu f=idk×μ AC代码
f ( 1 ) = 0 , f ( p ) = p k − 1 , f ( p k ) = f ( p k − 1 ) × p k f(1)=0,f(p)=p^k-1,f(p^k)=f(p^{k-1})\times p^k f(1)=0,f(p)=pk−1,f(pk)=f(pk−1)×pk
莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k] ∑i=1n∑j=1m[gcd(i,j)==k]
luogu3455 ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] ( T ∈ [ 1 , 50   000 ] { n , m ∈ [ 1 , 50   000 ] } ) \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k] (T\in[1,50\,000]\{n,m\in[1,50\,000]\}) ∑i=1n∑j=1m[gcd(i,j)==k] (T∈[1,50000]{n,m∈[1,50000]}) AC代码
hdu1695 ∑ i = 1 n ∑ j = i + 1 m [ gcd ( i , j ) = = k ] ( a , b ∈ [ 1 , 100   000 ] , k ∈ [ 0 , 100   000 ] ) \sum_{i=1}^n\sum_{j=i+1}^m[\gcd(i,j)==k] (a,b\in[1,100\,000],k\in[0,100\,000]) ∑i=1n∑j=i+1m[gcd(i,j)==k] (a,b∈[1,100000],k∈[0,100000]) AC代码
bzoj2301 ∑ i = a b ∑ j = c d [ gcd ( i , j ) = = k ] ( n ∈ [ 1 , 50   000 ] { 1 ≤ a ≤ b ≤ 50   000 , 1 ≤ c ≤ d ≤ 50   000 } ) \sum_{i=a}^b\sum_{j=c}^d[\gcd(i,j)==k] (n\in[1,50\,000]\{1\leq a\leq b\leq 50\,000,1\leq c\leq d\leq 50\,000\}) ∑i=ab∑j=cd[gcd(i,j)==k] (n∈[1,50000]{1≤a≤b≤50000,1≤c≤d≤50000}) AC代码
设 f ( k , n , m ) = ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] 设f(k,n,m)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k] 设f(k,n,m)=i=1∑nj=1∑m[gcd(i,j)==k]
倍 数 反 演 し た い 试 图 倍 数 反 演 \frac{倍数反演したい}{试图倍数反演} 试图倍数反演倍数反演したい
设 g ( k , n , m ) = ∑ i = 1 ∞ f ( i k , n , m ) 设g(k,n,m)=\sum_{i=1}^\infty f(ik,n,m) 设g(k,n,m)=i=1∑∞f(ik,n,m)
g ( k , n , m ) = ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) % k = = 0 ] g(k,n,m)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)\%k==0] g(k,n,m)=i=1∑nj=1∑m[gcd(i,j)%k==0]
做 代 换 i = a k , j = b k 做代换i=ak,j=bk 做代换i=ak,j=bk
そ れ で は 那 么 g ( k , n , m ) = ∑ a k = 1 n ∑ b k = 1 m [ gcd ( a k , b k ) % k = = 0 ] \frac{それでは}{那么}g(k,n,m)=\sum_{ak=1}^n\sum_{bk=1}^m[\gcd(ak,bk)\%k==0] 那么それではg(k,n,m)=ak=1∑nbk=1∑m[gcd(ak,bk)%k==0]
そ し て 然 后 g ( k , n , m ) = ∑ a = 1 n / k ∑ b = 1 m / k 1 \frac{そして}{然后}g(k,n,m)=\sum_{a=1}^{n/k}\sum_{b=1}^{m/k}1 然后そしてg(k,n,m)=a=1∑n/kb=1∑m/k1
だ か ら 所 以 g ( k , n , m ) = ⌊ n k ⌋ × ⌊ m k ⌋ \frac{だから}{所以}g(k,n,m)=⌊\frac{n}{k}⌋\times ⌊\frac{m}{k}⌋ 所以だからg(k,n,m)=⌊kn⌋×⌊km⌋
倍 数 反 演 成 功 f ( k , n , m ) = ∑ i = 1 ∞ g ( i k , n , m ) × μ ( i ) 倍数反演成功f(k,n,m)=\sum_{i=1}^\infty{g(ik,n,m)\times\mu(i)} 倍数反演成功f(k,n,m)=i=1∑∞g(ik,n,m)×μ(i)
f ( k , n , m ) = ∑ i = 1 ∞ ⌊ n i k ⌋ × ⌊ m i k ⌋ × μ ( i ) f(k,n,m)=\sum_{i=1}^\infty{\lfloor\frac{n}{ik}\rfloor\times\lfloor\frac{m}{ik}\rfloor\times\mu(i)} f(k,n,m)=i=1∑∞⌊ikn⌋×⌊ikm⌋×μ(i)
だ っ て 因 为 ⌊ n i k ⌋ ≥ 1 才 会 对 总 和 有 贡 献 , だ か ら 所 以 i ≤ ⌊ n k ⌋ \frac{だって}{因为}\lfloor\frac{n}{ik}\rfloor\geq 1才会对总和有贡献,\frac{だから}{所以}i\leq\lfloor\frac{n}{k}\rfloor 因为だって⌊ikn⌋≥1才会对总和有贡献,所以だからi≤⌊kn⌋
f ( k , n , m ) = ∑ i = 1 n / k ⌊ n i k ⌋ × ⌊ m i k ⌋ × μ ( i ) ⇐ 可 整 除 分 块 O ( n ) f(k,n,m)=\sum_{i=1}^{n/k}{\lfloor\frac{n}{ik}\rfloor\times\lfloor\frac{m}{ik}\rfloor\times\mu(i)} \Leftarrow 可整除分块O(\sqrt{n}) f(k,n,m)=i=1∑n/k⌊ikn⌋×⌊ikm⌋×μ(i) ⇐可整除分块O(n)
上 式 O ( n ) 可 算 , 需 预 处 理 出 μ ( i ) 的 前 缀 和 O ( n ) 上式O(\sqrt{n})可算,需预处理出μ(i)的前缀和O(n) 上式O(n)可算,需预处理出μ(i)的前缀和O(n)
莫比乌斯反演: ∑ b 1 = 1 a 1 ∑ b 2 = 1 a 2 . . . ∑ b n = 1 a n [ gcd ( b 1 , b 2 , . . . , b n ) ≥ 2 ] \sum_{b_1=1}^{a_1}\sum_{b_2=1}^{a_2}...\sum_{b_n=1}^{a_n}[\gcd(b_1,b_2,...,b_n)\geq 2] ∑b1=1a1∑b2=1a2...∑bn=1an[gcd(b1,b2,...,bn)≥2]
hdu6053 ∑ b 1 = 1 a 1 ∑ b 2 = 1 a 2 . . . ∑ b n = 1 a n [ gcd ( b 1 , b 2 , . . . , b n ) ≥ 2 ] ( T ∈ [ 1 , 10 ] { n , a i ∈ [ 1 , 100   000 ] } ) \sum_{b_1=1}^{a_1}\sum_{b_2=1}^{a_2}...\sum_{b_n=1}^{a_n}[\gcd(b_1,b_2,...,b_n)\geq 2] (T\in [1,10]\{n,a_i\in[1,100\,000]\}) ∑b1=1a1∑b2=1a2...∑bn=1an[gcd(b1,b2,...,bn)≥2] (T∈[1,10]{n,ai∈[1,100000]}) AC代码
设 f ( k ) = ∑ b 1 = 1 a 1 ∑ b 2 = 1 a 2 . . . ∑ b n = 1 a n [ gcd ( b 1 , b 2 , . . . , b n ) % k = = 0 ] 设f(k)=\sum_{b_1=1}^{a_1}\sum_{b_2=1}^{a_2}...\sum_{b_n=1}^{a_n}[\gcd(b_1,b_2,...,b_n)\%k==0] 设f(k)=b1=1∑a1b2=1∑a2...bn=1∑an[gcd(b1,b2,...,bn)%k==0]
根 据 容 斥 原 理 , a n s = ∑ i = 2 ∞ − μ ( i ) × f ( i ) 根据容斥原理,ans=\sum_{i=2}^\infty-\mu(i)\times f(i) 根据容斥原理,ans=i=2∑∞−μ(i)×f(i)
显 然 f ( k ) = ∏ i = 1 n ⌊ a i k ⌋ , け れ ど 但 是 并 不 好 算 显然f(k)=\prod_{i=1}^n\lfloor\frac{a_i}{k}\rfloor,\frac{けれど}{但是}并不好算 显然f(k)=i=1∏n⌊kai⌋,但是けれど并不好算f ( k ) = ∏ i = 1 m a x { a } / k i g ( i , d ) f(k)=\prod_{i=1}^{max\{a\}/k}i^{g(i,d)} f(k)=i=1∏max{a}/kig(i,d)
g ( x , y ) = ∑ i = 1 n [ ⌊ a i y ⌋ = = x ] g(x,y)=\sum_{i=1}^n[\lfloor\frac{a_i}{y}\rfloor==x] g(x,y)=i=1∑n[⌊yai⌋==x]
g ( x , y ) = ∑ i = 1 n [ x y ≤ a i < x y + y ] g(x,y)=\sum_{i=1}^n[xy\leq a_i\lt xy+y] g(x,y)=i=1∑n[xy≤ai<xy+y]
だ か ら 所 以 需 要 预 处 理 出 h ( x ) = ∑ i = 1 n [ a i < x ] \frac{だから}{所以}需要预处理出h(x)=\sum_{i=1}^n[a_i\lt x] 所以だから需要预处理出h(x)=i=1∑n[ai<x]
そ し て 然 后 g ( x , y ) = h ( x y + y ) − h ( x y ) \frac{そして}{然后}g(x,y)=h(xy+y)-h(xy) 然后そしてg(x,y)=h(xy+y)−h(xy)
だ か ら 所 以 f ( k ) = ∏ i = 1 m a x { a } / k i h ( i d + d ) − h ( i d ) \frac{だから}{所以}f(k)=\prod_{i=1}^{max\{a\}/k}i^{h(id+d)-h(id)} 所以だからf(k)=i=1∏max{a}/kih(id+d)−h(id)
a n s = ∑ j = 2 ∞ − μ ( j ) × ∏ i = 1 m a x { a } / j i h ( i d + d ) − h ( i d ) ans=\sum_{j=2}^\infty-\mu(j)\times\prod_{i=1}^{max\{a\}/j}i^{h(id+d)-h(id)} ans=j=2∑∞−μ(j)×i=1∏max{a}/jih(id+d)−h(id)
だ つ て 因 为 m a x { a } / j ≥ 1 , だ か ら 所 以 j ≤ m a x { a } \frac{だつて}{因为}max\{a\}/j\geq 1,\frac{だから}{所以}j\leq max\{a\} 因为だつてmax{a}/j≥1,所以だからj≤max{a}
a n s = ∑ j = 2 m a x { a } − μ ( j ) × ∏ i = 1 m a x { a } / j i h ( i d + d ) − h ( i d ) ans=\sum_{j=2}^{max\{a\}}-\mu(j)\times\prod_{i=1}^{max\{a\}/j}i^{h(id+d)-h(id)} ans=j=2∑max{a}−μ(j)×i=1∏max{a}/jih(id+d)−h(id)
上 式 O ( n l o g 2 n ) 可 算 , 需 预 处 理 出 μ ( i ) 和 h ( i ) O ( n ) 上式O(nlog^2n)可算,需预处理出\mu(i)和h(i)O(n) 上式O(nlog2n)可算,需预处理出μ(i)和h(i)O(n)
莫比乌斯反演: ∑ k = 1 ∞ ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k 2 ] \sum_{k=1}^\infty\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k^2] ∑k=1∞∑i=1n∑j=1m[gcd(i,j)==k2]
hdu5663 nm- ∑ k = 1 ∞ ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k 2 ] ( T ∈ [ 1 , 10   000 ] { n , m ∈ [ 1 , 10   000   000 ] } ) \sum_{k=1}^\infty\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k^2] (T\in[1,10\,000]\{n,m\in[1,10\,000\,000]\}) ∑k=1∞∑i=1n∑j=1m[gcd(i,j)==k2] (T∈[1,10000]{n,m∈[1,10000000]}) AC代码
a n s = ∑ k = 1 ∞ ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k 2 ] ans=\sum_{k=1}^\infty\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k^2] ans=k=1∑∞i=1∑nj=1∑m[gcd(i,j)==k2]
a n s = ∑ k = 1 ∞ ∑ d = 1 ∞ [ d = = k 2 ] ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] ans=\sum_{k=1}^\infty\sum_{d=1}^\infty[d==k^2]\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k] ans=k=1∑∞d=1∑∞[d==k2]i=1∑nj=1∑m[gcd(i,j)==k]
a n s = ∑ k = 1 ∞ ∑ d = 1 ∞ [ d = = k 2 ] × ∑ i = 1 n / d ⌊ n i d ⌋ × ⌊ m i d ⌋ × μ ( i ) ans=\sum_{k=1}^\infty\sum_{d=1}^\infty[d==k^2]\times\sum_{i=1}^{n/d}{\lfloor\frac{n}{id}\rfloor\times\lfloor\frac{m}{id}\rfloor\times\mu(i)} ans=k=1∑∞d=1∑∞[d==k2]×i=1∑n/d⌊idn⌋×⌊idm⌋×μ(i)
设 f ( x ) = [ x 是 平 方 数 ] , そ れ で は 那 么 有 设f(x)=[x是平方数],\frac{それでは}{那么}有 设f(x)=[x是平方数],那么それでは有
a n s = ∑ d = 1 ∞ f ( d ) × ∑ i = 1 n / d ⌊ n i d ⌋ × ⌊ m i d ⌋ × μ ( i ) ans=\sum_{d=1}^\infty f(d)\times\sum_{i=1}^{n/d}{\lfloor\frac{n}{id}\rfloor\times\lfloor\frac{m}{id}\rfloor\times\mu(i)} ans=d=1∑∞f(d)×i=1∑n/d⌊idn⌋×⌊idm⌋×μ(i)
a n s = ∑ d = 1 ∞ ∑ i = 1 n / d f ( d ) × ⌊ n i d ⌋ × ⌊ m i d ⌋ × μ ( i ) ans=\sum_{d=1}^\infty\sum_{i=1}^{n/d}{f(d)\times\lfloor\frac{n}{id}\rfloor\times\lfloor\frac{m}{id}\rfloor\times\mu(i)} ans=d=1∑∞i=1∑n/df(d)×⌊idn⌋×⌊idm⌋×μ(i)
设 T = i d , そ し て 然 后 改 变 求 和 次 序 设T=id,\frac{そして}{然后}改变求和次序 设T=id,然后そして改变求和次序
a n s = ∑ T = 1 ∞ ⌊ n T ⌋ × ⌊ m T ⌋ ∑ i ∣ T f ( T i ) × μ ( i ) ⇐ 可 整 除 分 块 O ( n ) ans=\sum_{T=1}^\infty\lfloor\frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor\sum_{i\mid T}f(\frac{T}{i})\times\mu(i)\Leftarrow 可整除分块O(\sqrt{n}) ans=T=1∑∞⌊Tn⌋×⌊Tm⌋i∣T∑f(iT)×μ(i)⇐可整除分块O(n)
上 式 O ( n ) 可 算 上式O(\sqrt{n})可算 上式O(n)可算设 g ( T ) = ∑ i ∣ T f ( T i ) × μ ( i ) , g ( T ) 可 以 暴 力 筛 出 来 , 复 杂 度 是 O ( n ) 设g(T)=\sum_{i\mid T}f(\frac{T}{i})\times\mu(i),g(T)可以暴力筛出来,复杂度是O(n) 设g(T)=i∣T∑f(iT)×μ(i),g(T)可以暴力筛出来,复杂度是O(n)
莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m gcd ( i , j ) \sum_{i=1}^n\sum_{j=1}^m\gcd(i,j) ∑i=1n∑j=1mgcd(i,j)
bzoj2005 ∑ i = 1 n ∑ j = 1 m 2 × gcd ( i , j ) − 1 ( n , m ∈ [ 1 , 100   000 ] ) \sum_{i=1}^n\sum_{j=1}^m2\times\gcd(i,j)-1 (n,m\in[1,100\,000]) ∑i=1n∑j=1m2×gcd(i,j)−1 (n,m∈[1,100000]) AC代码
a n s = ∑ i = 1 n ∑ j = 1 m gcd ( i , j ) ans=\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j) ans=i=1∑nj=1∑mgcd(i,j)
a n s = ∑ d = 1 n d ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = d ] ans=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==d] ans=d=1∑ndi=1∑nj=1∑m[gcd(i,j)==d]
a n s = ∑ d = 1 n d ∑ i = 1 n / d ⌊ n i d ⌋ × ⌊ m i d ⌋ × μ ( i ) ans=\sum_{d=1}^nd\sum_{i=1}^{n/d}{\lfloor\frac{n}{id}\rfloor\times\lfloor\frac{m}{id}\rfloor\times\mu(i)} ans=d=1∑ndi=1∑n/d⌊idn⌋×⌊idm⌋×μ(i)
设 f ( k , n , m ) = ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = = k ] = ∑ i = 1 n / k ⌊ n i k ⌋ × ⌊ m i k ⌋ × μ ( i ) 设f(k,n,m)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==k]=\sum_{i=1}^{n/k}{\lfloor\frac{n}{ik}\rfloor\times\lfloor\frac{m}{ik}\rfloor\times\mu(i)} 设f(k,n,m)=i=1∑nj=1∑m[gcd(i,j)==k]=i=1∑n/k⌊ikn⌋×⌊ikm⌋×μ(i)
a n s = ∑ d = 1 n d × f ( 1 , ⌊ n d ⌋ , ⌊ n d ⌋ ) ans=\sum_{d=1}^nd\times f(1,\lfloor\frac{n}{d}\rfloor,\lfloor\frac{n}{d}\rfloor) ans=d=1∑nd×f(1,⌊dn⌋,⌊dn⌋)
O ( n ) 的 做 法 就 出 来 了 , 不 过 通 过 调 整 求 和 次 序 可 以 获 得 O ( n ) 的 做 法 O(n)的做法就出来了,不过通过调整求和次序可以获得O(\sqrt{n})的做法 O(n)的做法就出来了,不过通过调整求和次序可以获得O(n)的做法
a n s = ∑ d = 1 n d ∑ i = 1 n / d ⌊ n i d ⌋ × ⌊ m i d ⌋ × μ ( i ) ans=\sum_{d=1}^nd\sum_{i=1}^{n/d}{\lfloor\frac{n}{id}\rfloor\times\lfloor\frac{m}{id}\rfloor\times\mu(i)} ans=d=1∑ndi=1∑n/d⌊idn⌋×⌊idm⌋×μ(i)
设 T = i d , そ し て 然 后 交 换 求 和 次 序 为 ∑ T = 1 n ∑ i ∣ T 设T=id,\frac{そして}{然后}交换求和次序为\sum_{T=1}^n\sum_{i\mid T} 设T=id,然后そして交换求和次序为T=1∑ni∣T∑
a n s = ∑ T = 1 n ⌊ n T ⌋ × ⌊ m T ⌋ × ∑ i ∣ T μ ( i ) × ⌊ T i ⌋ ans=\sum_{T=1}^n{\lfloor\frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor\times\sum_{i\mid T}\mu(i)\times\lfloor\frac{T}{i}\rfloor} ans=T=1∑n⌊Tn⌋×⌊Tm⌋×i∣T∑μ(i)×⌊iT⌋
上 式 O ( n ) 可 算 , 需 要 预 处 理 出 ∑ i ∣ T μ ( i ) × ⌊ T i ⌋ , 可 以 用 线 性 筛 O ( n ) 时 间 求 出 上式O(\sqrt{n})可算,需要预处理出\sum_{i\mid T}\mu(i)\times\lfloor\frac{T}{i}\rfloor,可以用线性筛O(n)时间求出 上式O(n)可算,需要预处理出i∣T∑μ(i)×⌊iT⌋,可以用线性筛O(n)时间求出设 f ( T ) = μ ( i ) × ⌊ T i ⌋ , 那 么 对 于 线 性 筛 有 如 下 式 子 设f(T)=\mu(i)\times\lfloor\frac{T}{i}\rfloor,那么对于线性筛有如下式子 设f(T)=μ(i)×⌊iT⌋,那么对于线性筛有如下式子
f ( 1 ) = 1 , f ( p ) = p − 1 , f ( p k ) = p × f ( p k − 1 ) f(1)=1,f(p)=p-1,f(p^k)=p\times f(p^{k-1}) f(1)=1,f(p)=p−1,f(pk)=p×f(pk−1)
莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j) ∑i=1n∑j=1mlcm(i,j)
bzoj2154 ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) ( n , m ∈ [ 1 , 10   000   000 ] ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j) (n,m\in[1,10\,000\,000]) ∑i=1n∑j=1mlcm(i,j) (n,m∈[1,10000000]) AC代码
a n s = ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) ans=\sum_{i=1}^n\sum_{j=1}^mlcm(i,j) ans=i=1∑nj=1∑mlcm(i,j)
a n s = ∑ i = 1 n ∑ j = 1 m i j gcd ( i , j ) ans=\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{\gcd(i,j)} ans=i=1∑nj=1∑mgcd(i,j)ij
a n s = ∑ d = 1 n ∑ i = 1 n ∑ j = 1 m i j d [ gcd ( i , j ) = = d ] ans=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{d}[\gcd(i,j)==d] ans=d=1∑ni=1∑nj=1∑mdij[gcd(i,j)==d]
做 代 换 i = i d , j = j d 做代换i=id,j=jd 做代换i=id,j=jd
a n s = ∑ d = 1 n ∑ i d = 1 n ∑ j d = 1 m i d j d d [ gcd ( i d , j d ) = = d ] ans=\sum_{d=1}^n\sum_{id=1}^n\sum_{jd=1}^m\frac{idjd}{d}[\gcd(id,jd)==d] ans=d=1∑nid=1∑njd=1∑mdidjd[gcd(id,jd)==d]
a n s = ∑ d = 1 n d ∑ i = 1 n / d ∑ j = 1 m / d i j [ gcd ( i , j ) = = 1 ] ans=\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ij[\gcd(i,j)==1] ans=d=1∑ndi=1∑n/dj=1∑m/dij[gcd(i,j)==1]
设 f ( k , n , m ) = ∑ i = 1 n ∑ j = 1 m i j × [ gcd ( i , j ) = = k ] 设f(k,n,m)=\sum_{i=1}^n\sum_{j=1}^m{ij\times[\gcd(i,j)==k]} 设f(k,n,m)=i=1∑nj=1∑mij×[gcd(i,j)==k]倍 数 反 演 し た い 试 图 倍 数 反 演 \frac{倍数反演したい}{试图倍数反演} 试图倍数反演倍数反演したい
设 g ( k , n , m ) = ∑ i = 1 ∞ f ( i k , n , m ) 设g(k,n,m)=\sum_{i=1}^\infty f(ik,n,m) 设g(k,n,m)=i=1∑∞f(ik,n,m)
g ( k , n , m ) = ∑ i = 1 n ∑ j = 1 m i j × [ gcd ( i , j ) % k = = 0 ] g(k,n,m)=\sum_{i=1}^n\sum_{j=1}^m{ij\times[\gcd(i,j)\%k==0]} g(k,n,m)=i=1∑nj=1∑mij×[gcd(i,j)%k==0]
そ れ で は 那 么 g ( k , n , m ) 可 以 か ん た ん 轻 易 算 出 \frac{それでは}{那么}g(k,n,m)可以\frac{かんたん}{轻易}算出 那么それではg(k,n,m)可以轻易かんたん算出
/ / 做 代 换 i = i k , j = j k //做代换i=ik,j=jk //做代换i=ik,j=jk
そ れ で は 那 么 g ( k , n , m ) = ∑ i k = 1 n ∑ j k = 1 m i k j k × [ gcd ( i k , j k ) % k = = 0 ] \frac{それでは}{那么}g(k,n,m)=\sum_{ik=1}^n\sum_{jk=1}^m{ikjk\times[\gcd(ik,jk)\%k==0]} 那么それではg(k,n,m)=ik=1∑njk=1∑mikjk×[gcd(ik,jk)%k==0]
そ し て 然 后 g ( k , n , m ) = k 2 × ∑ i = 1 n / k ∑ j = 1 m / k i j × [ gcd ( i , j ) % 1 = = 0 ] \frac{そして}{然后}g(k,n,m)=k^2\times\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}{ij\times[\gcd(i,j)\%1==0]} 然后そしてg(k,n,m)=k2×i=1∑n/kj=1∑m/kij×[gcd(i,j)%1==0]
だ つ て 因 为 [ gcd ( i , j ) % 1 = = 0 ] 永 真 \frac{だつて}{因为}[\gcd(i,j)\%1==0]永真 因为だつて[gcd(i,j)%1==0]永真
だ か ら 所 以 g ( k , n , m ) = k 2 × ∑ i = 1 n / k ∑ j = 1 m / k i j \frac{だから}{所以}g(k,n,m)=k^2\times\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}ij 所以だからg(k,n,m)=k2×i=1∑n/kj=1∑m/kij设 S ( x ) = 1 + 2 + . . . + x 设S(x)=1+2+...+x 设S(x)=1+2+...+x
そ れ で は 那 么 S ( x ) = x 2 + x 2 , O ( 1 ) 算 出 \frac{それでは}{那么}S(x)=\frac{x^2+x}{2},O(1)算出 那么それではS(x)=2x2+x,O(1)算出
だ か ら 所 以 g ( k , n , m ) = k 2 × S ( ⌊ n k ⌋ ) S ( ⌊ m k ⌋ ) \frac{だから}{所以}g(k,n,m)=k^2\times S(\lfloor\frac{n}{k}\rfloor)S(\lfloor\frac{m}{k}\rfloor) 所以だからg(k,n,m)=k2×S(⌊kn⌋)S(⌊km⌋)
倍 数 反 演 成 功 , f ( k , n , m ) = ∑ d = 1 ∞ μ ( d ) × g ( d k ) 倍数反演成功,f(k,n,m)=\sum_{d=1}^\infty\mu(d)\times g(dk) 倍数反演成功,f(k,n,m)=d=1∑∞μ(d)×g(dk)
f ( k , n , m ) = ∑ d = 1 ∞ μ ( d ) × ( d k ) 2 × S ( ⌊ n d k ⌋ ) S ( ⌊ m d k ⌋ ) f(k,n,m)=\sum_{d=1}^\infty\mu(d)\times (dk)^2\times S(\lfloor\frac{n}{dk}\rfloor)S(\lfloor\frac{m}{dk}\rfloor) f(k,n,m)=d=1∑∞μ(d)×(dk)2×S(⌊dkn⌋)S(⌊dkm⌋)
f ( k , n , m ) = k 2 ∑ d = 1 ∞ μ ( d ) × d 2 × S ( ⌊ n d k ⌋ ) S ( ⌊ m d k ⌋ ) f(k,n,m)=k^2\sum_{d=1}^\infty\mu(d)\times d^2\times S(\lfloor\frac{n}{dk}\rfloor)S(\lfloor\frac{m}{dk}\rfloor) f(k,n,m)=k2d=1∑∞μ(d)×d2×S(⌊dkn⌋)S(⌊dkm⌋)
だ つ て 因 为 ⌊ n d k ⌋ ≥ 1 , だ か ら 所 以 d ≤ ⌊ n k ⌋ \frac{だつて}{因为}\lfloor\frac{n}{dk}\rfloor\geq 1,\frac{だから}{所以}d\leq \lfloor\frac{n}{k}\rfloor 因为だつて⌊dkn⌋≥1,所以だからd≤⌊kn⌋
f ( k , n , m ) = k 2 ∑ d = 1 n / k μ ( d ) × d 2 × S ( ⌊ n d k ⌋ ) S ( ⌊ m d k ⌋ ) f(k,n,m)=k^2\sum_{d=1}^{n/k}\mu(d)\times d^2\times S(\lfloor\frac{n}{dk}\rfloor)S(\lfloor\frac{m}{dk}\rfloor) f(k,n,m)=k2d=1∑n/kμ(d)×d2×S(⌊dkn⌋)S(⌊dkm⌋)
上 式 O ( n ) 可 算 , 需 要 预 处 理 μ ( d ) × d 2 的 前 缀 和 , 可 以 线 性 求 出 来 O ( n ) 上式O(\sqrt{n})可算,需要预处理\mu(d)\times d^2的前缀和,可以线性求出来O(n) 上式O(n)可算,需要预处理μ(d)×d2的前缀和,可以线性求出来O(n)
a n s = ∑ d = 1 n d × f ( 1 , ⌊ n d ⌋ , ⌊ m d ⌋ ) ans=\sum_{d=1}^nd\times f(1,\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor) ans=d=1∑nd×f(1,⌊dn⌋,⌊dm⌋)
上 式 O ( n × n ) 可 算 , だ か ら 所 以 ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) 需 要 O ( n ) 的 时 间 上式O(\sqrt{n}\times\sqrt{n})可算,\frac{だから}{所以}\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)需要O(n)的时间 上式O(n×n)可算,所以だからi=1∑nj=1∑mlcm(i,j)需要O(n)的时间
莫比乌斯反演: ∑ i = 1 n ∑ j = 1 m d ( i j ) \sum_{i=1}^n\sum_{j=1}^md(ij) ∑i=1n∑j=1md(ij)
bzoj3994 ∑ i = 1 n ∑ j = 1 m d ( i j ) ( T ∈ [ 1 , 50   000 ] { n , m ∈ [ 1 , 50   000 ] } ) \sum_{i=1}^n\sum_{j=1}^md(ij) (T\in[1,50\,000]\{n,m\in[1,50\,000]\}) ∑i=1n∑j=1md(ij) (T∈[1,50000]{n,m∈[1,50000]}) AC代码
a n s = ∑ i = 1 n ∑ j = 1 m d ( i j ) ans=\sum_{i=1}^n\sum_{j=1}^m{d(ij)} ans=i=1∑nj=1∑md(ij)
a n s = ∑ i = 1 n ∑ j = 1 m ∑ x ∣ i ∑ y ∣ j [ gcd ( x , y ) = = 1 ] ans=\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}{[\gcd(x,y)==1]} ans=i=1∑nj=1∑mx∣i∑y∣j∑[gcd(x,y)==1]稍 微 枚 举 几 项 即 可 知 : ∑ i = 1 n ∑ x ∣ i a n y = ∑ x = 1 n ⌊ n x ⌋ a n y 稍微枚举几项即可知:\sum_{i=1}^n\sum_{x|i}{any}=\sum_{x=1}^n{\lfloor\frac{n}{x}\rfloor any} 稍微枚举几项即可知:i=1∑nx∣i∑any=x=1∑n⌊xn⌋any
a n s = ∑ x = 1 n ∑ y = 1 m ⌊ n x ⌋ ⌊ m y ⌋ [ gcd ( x , y ) = = 1 ] ans=\sum_{x=1}^n\sum_{y=1}^m\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor[\gcd(x,y)==1] ans=x=1∑ny=1∑m⌊xn⌋⌊ym⌋[gcd(x,y)==1]
设 f ( k , n , m ) = ∑ x = 1 n ∑ y = 1 m ⌊ n x ⌋ ⌊ m y ⌋ [ gcd ( x , y ) = = k ] 设f(k,n,m)=\sum_{x=1}^n\sum_{y=1}^m\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor[\gcd(x,y)==k] 设f(k,n,m)=x=1∑ny=1∑m⌊xn⌋⌊ym⌋[gcd(x,y)==k]
倍 数 反 演 し た い 试 图 倍 数 反 演 \frac{倍数反演したい}{试图倍数反演} 试图倍数反演倍数反演したい
设 g ( k , n , m ) = ∑ i = 1 ∞ f ( i k , n , m ) 设g(k,n,m)=\sum_{i=1}^\infty f(ik,n,m) 设g(k,n,m)=i=1∑∞f(ik,n,m)
そ れ で は 那 么 g ( k , n , m ) = ∑ x = 1 n ∑ y = 1 m ⌊ n x ⌋ ⌊ m y ⌋ [ gcd ( x , y ) % k = = 0 ] \frac{それでは}{那么}g(k,n,m)=\sum_{x=1}^n\sum_{y=1}^m\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor[\gcd(x,y)\%k==0] 那么それではg(k,n,m)=x=1∑ny=1∑m⌊xn⌋⌊ym⌋[gcd(x,y)%k==0]
/ / 做 代 换 x = x k , y = y k //做代换x=xk,y=yk //做代换x=xk,y=yk
g ( k , n , m ) = ∑ x k = 1 n ∑ y k = 1 m ⌊ n x k ⌋ ⌊ m y k ⌋ [ gcd ( x k , y k ) % k = = 0 ] g(k,n,m)=\sum_{xk=1}^n\sum_{yk=1}^m\lfloor\frac{n}{xk}\rfloor\lfloor\frac{m}{yk}\rfloor[\gcd(xk,yk)\%k==0] g(k,n,m)=xk=1∑nyk=1∑m⌊xkn⌋⌊ykm⌋[gcd(xk,yk)%k==0]
g ( k , n , m ) = ∑ x = 1 n / k ∑ y = 1 m / k ⌊ n x k ⌋ ⌊ m y k ⌋ g(k,n,m)=\sum_{x=1}^{n/k}\sum_{y=1}^{m/k}\lfloor\frac{n}{xk}\rfloor\lfloor\frac{m}{yk}\rfloor g(k,n,m)=x=1∑n/ky=1∑m/k⌊xkn⌋⌊ykm⌋设 S ( n ) = ∑ i = 1 n ⌊ n i ⌋ 设S(n)=\sum_{i=1}^n{\lfloor\frac{n}{i}\rfloor} 设S(n)=i=1∑n⌊in⌋
S ( n ) 等 价 于 ∑ i = 1 n d ( i ) / / d ( i ) : i 的 因 数 个 数 S(n)等价于\sum_{i=1}^n{d(i)} //d(i):i的因数个数 S(n)等价于i=1∑nd(i) //d(i):i的因数个数
d ( i ) 是 一 个 积 性 函 数 , 所 以 可 以 用 线 性 筛 出 来 d(i)是一个积性函数,所以可以用线性筛出来 d(i)是一个积性函数,所以可以用线性筛出来
需 要 一 个 辅 助 数 组 a ( i ) = i 的 最 小 因 子 的 次 幂 需要一个辅助数组a(i)= i的最小因子的次幂 需要一个辅助数组a(i)=i的最小因子的次幂
S ( 1 ) = 1 , a ( 1 ) = 0 , S ( p ) = 2 , a ( p ) = 1 , S ( p k ) = S ( p k − 1 ) 1 + a ( p k − 1 ) × ( 2 + a ( p k − 1 ) ) , a ( p k ) = a ( p k − 1 ) + 1 S(1)=1,a(1)=0,S(p)=2,a(p)=1,S(p^k)=\frac{S(p^{k-1})}{1+a(p^{k-1})}\times(2+a(p^{k-1})),a(p^k)=a(p^{k-1})+1 S(1)=1,a(1)=0,S(p)=2,a(p)=1,S(pk)=1+a(pk−1)S(pk−1)×(2+a(pk−1)),a(pk)=a(pk−1)+1
g ( k , n , m ) = S ( ⌊ n k ⌋ ) × S ( ⌊ m k ⌋ ) g(k,n,m)=S(\lfloor\frac{n}{k}\rfloor)\times S(\lfloor\frac{m}{k}\rfloor) g(k,n,m)=S(⌊kn⌋)×S(⌊km⌋)
倍 数 反 演 成 功 , f ( k , n , m ) = ∑ i = 1 ∞ g ( i k , n , m ) × μ ( i ) 倍数反演成功,f(k,n,m)=\sum_{i=1}^\infty{g(ik,n,m)\times\mu(i)} 倍数反演成功,f(k,n,m)=i=1∑∞g(ik,n,m)×μ(i)
f ( k , n , m ) ∑ i = 1 ∞ μ ( i ) × S ( ⌊ n i k ⌋ ) × S ( ⌊ m i k ⌋ ) f(k,n,m)\sum_{i=1}^\infty\mu(i)\times S(\lfloor\frac{n}{ik}\rfloor)\times S(\lfloor\frac{m}{ik}\rfloor) f(k,n,m)i=1∑∞μ(i)×S(⌊ikn⌋)×S(⌊ikm⌋)
だ つ て 因 为 ⌊ n i k ⌋ ≥ 1 , だ か ら 所 以 i ≤ ⌊ n k ⌋ \frac{だつて}{因为}\lfloor\frac{n}{ik}\rfloor\geq 1,\frac{だから}{所以}i\leq \lfloor\frac{n}{k}\rfloor 因为だつて⌊ikn⌋≥1,所以だからi≤⌊kn⌋
f ( k , n , m ) ∑ i = 1 n / k μ ( i ) × S ( ⌊ n i k ⌋ ) × S ( ⌊ m i k ⌋ ) f(k,n,m)\sum_{i=1}^{n/k}\mu(i)\times S(\lfloor\frac{n}{ik}\rfloor)\times S(\lfloor\frac{m}{ik}\rfloor) f(k,n,m)i=1∑n/kμ(i)×S(⌊ikn⌋)×S(⌊ikm⌋)
上 式 可 O ( n ) 计 算 , け れ ど 但 是 需 要 预 处 理 出 μ ( i ) 的 前 缀 和 以 及 S ( n ) 的 每 一 项 , 需 要 O ( n ) 的 时 间 上式可O(\sqrt{n})计算,\frac{けれど}{但是}需要预处理出\mu(i)的前缀和以及S(n)的每一项,需要O(n)的时间 上式可O(n)计算,但是けれど需要预处理出μ(i)的前缀和以及S(n)的每一项,需要O(n)的时间
莫比乌斯反演: ∑ i = 1 n [ i 不 含 有 平 方 因 子 ] \sum_{i=1}^n[i不含有平方因子] ∑i=1n[i不含有平方因子]
bzoj2440 求 第 k 个 不 含 平 方 因 子 的 数 ( 1 不 算 ) ( T ∈ [ 1 , 50 ] { k ∈ [ 1 , 1 e 9 ] } ) 求第k个不含平方因子的数(1不算) (T\in[1,50]\{k\in[1,1e9]\}) 求第k个不含平方因子的数(1不算) (T∈[1,50]{k∈[1,1e9]}) AC代码
直 接 容 斥 , f ( n ) = ∑ i = 1 n [ i 不 含 有 平 方 因 子 ] = ∑ i = 1 n μ ( i ) × n i 2 直接容斥,f(n)=\sum_{i=1}^n[i不含有平方因子]=\sum_{i=1}^{\sqrt{n}}{\mu(i)\times\frac{n}{i^2}} 直接容斥,f(n)=i=1∑n[i不含有平方因子]=i=1∑nμ(i)×i2n
上 式 O ( n ) 可 算 , 对 于 b z o j 2440 来 说 可 以 二 分 找 到 答 案 上式O(\sqrt{n})可算,对于bzoj2440来说可以二分找到答案 上式O(n)可算,对于bzoj2440来说可以二分找到答案