仅入门,仅是一篇学习小记,仅记录做题时的想法和过程,可能会有些许错误。
题单
莫比乌斯反演
对于一些函数 f(n) ,如果很难直接求出它的值,而容易求出其倍数和或约数和 g(n),那么可以通过莫比乌斯反演简化运算,求得 f(n) 的值。
前置知识
艾佛森括号
[P]={10If P is trueOtherwise
此处 P 是一个可真可假的命题。
数论分块
引理
∀a,b,c∈Z,⌊bca⌋=c⌊ba⌋
证明:
ba=⌊ba⌋+r(0≤r<1)
⌊bca⌋=⌊ba×c1⌋=⌊c1×(⌊ba⌋+r)⌋=c⌊ba⌋+cr=c⌊ba⌋
形式一
求:
i=1∑n⌊in⌋
对于每一个 ⌊in⌋ 我们可以通过打表可以发现:有许多 ⌊in⌋ 的值是一样的,而且它们呈一个块状分布。
我们发现对于每一个值相同的块,它的最后一个数就是⌊in⌋n。
得出这个结论后,我们就可以做的 O(n) 处理了。
for(int l = 1, r;l <= n; l = r + 1)
{
r = n / (n / l);
ans += (r - l + 1) * (n / l);
}
形式二
给定 k,求:
i=1∑nkmodi
显然,上式等于:
i=1∑nk−i⋅⌊ik⌋
可以转化为:
n⋅k−i=1∑ni⋅⌊ik⌋
时间复杂度 O(n)。
CODE
形式三
求:
i=1∑nf(i)⋅⌊in⌋
对前半段的函数维护一个前缀和,再利用整除分块处理式子的后半段,处理答案的时候,把两段相乘即可。
例题
若 x 分解质因数结果为 x=i=1∏zpiki,令 f(x)=i=1∏z(ki+1)。
求 i=l∑rf(i) 对 998244353 取模的结果。
上面的可以简化为:
ans=i=1∑rf(i)−j=1∑l−1f(j)
考虑如何求 i=1∑rf(i),对于 [1,r] 的整数 k,k 作为因数在 [1,r] 中出现了 ⌊kr⌋ 次,显然对答案的贡献为 ⌊kr⌋。
则:
ans=i=1∑r⌊ir⌋−j=1∑l−1⌊jl−1⌋
最后再数论分块即可。
时间复杂度 O(n)。
CODE
求:
i=1∑nj=1∑m(nmodi)×(mmodj),i=j
膜 19940417 的值。
首先,不妨设 n≤m。
显然,上式可简化为:
i=1∑nj=1∑m(nmodi)×(mmodj)−i=1∑n(nmodi)×(mmodi)
将两个求和拆开,有:
i=1∑n(nmodi)×j=1∑m(mmodj)−i=1∑n(nmodi)(mmodi)
根据取模的定义,amodb=a−b×⌊ba⌋,将上式转换为:
i=1∑n(n−i×⌊in⌋)×j=1∑m(m−j×⌊jm⌋)−i=1∑n(n−i×⌊in⌋)×(m−i×⌊im⌋)
将括号拆开,可以得到:
(n2−i=1∑ni×⌊in⌋)×(m2−j=1∑mj×⌊jm⌋)−i=1∑n(nm−mi×⌊in⌋−ni×⌊im⌋+i2×⌊in⌋×⌊im⌋)
最后再数论分块即可。
时间复杂度 O(n)。
需要注意一下除法取模的问题(用逆元)。
CODE
积性函数
定义
如果一个数论函数 f(n) 满足 f(pq)=f(p)×f(q),gcd(p,q)=1,则称 f(n) 是一个积性函数。
特别的,如果不要求 gcd(p,q)=1 且依然满足上述式子的话,则称 f(n) 是一个完全积性函数。
性质
若 f(n) 和 g(n) 都是积性函数,,则以下函数也为积性函数:
h(x)=f(xp)h(x)=fp(x)h(x)=f(x)g(x)h(x)=d∣x∑f(d)g(dx)
常见积性函数
- 单位函数 ϵ(n)=[n=1]。
- 幂函数 Idk(n)=nk, id1(n) 通常简记为 id(n)。
- 常数函数 1(n)=1。
- 因数个数 d(n)=d∣n∑1。
- 除数函数 σk(n)=d∣n∑dk。
k=1 时为因数和函数,通常简记为 σn。
k=0 时为因数个数函数 σ0(n)。
- 欧拉函数 φ(n)=i=1∑n[gcd(i,n)=1]。
- 莫比乌斯函数 μ(n)=⎩⎨⎧10(−1)kn=1n 含有平方因子k为 n 的本质不同质因子个数。
狄利克雷卷积
定义
定义两个数论函数 f,g 的狄利克雷卷积为:
(f∗g)(n)=d∣n∑f(d)g(dn)
性质
- 显然满足交换律,结合律,分配律。
- f∗g=g∗f
- (f∗g)∗h=f∗(g∗h)
- f∗(g+h)=f∗g+f∗h
- ϵ 为狄利克雷卷积的单位元,有 (f∗ϵ)(n)=f(n)。
- 若 f,g 为积性函数,则 f∗g 为积性函数。
- ϵ=μ∗1=d∣n∑μ(d)。
- (Idk∗1)(n)=∑d∣nIdk(d)=∑d∣ndk=σk(n)。
- φ∗1=φ=IdId∗μ。
杜教筛
问题描述
求 S(n)=i=1∑nf(i),其中 f(i) 为积性函数。
1≤n≤231。
算法解决
显然,线性筛是 O(n) 的,过不了。
考虑推数学式子。
构造积性函数 h,g,使得 h=f∗g。
有:
i=1∑nh(i)=i=1∑nd∣i∑f(di)g(d)=d=1∑ng(d)i=1∑⌊dn⌋f(i)=d=1∑ng(d)S(⌊dn⌋)
因为我们要算的是 S(n),那把这项单独拎出来不就得了。
所以,有:
S(n)=g(1)i=1∑nh(i)−d=2∑ng(d)S(⌊dn⌋)
于是我们只要能快速算出 h 的前缀和就可以了。
练习
μ 的前缀和
因为 μ∗I=ϵ,那么取 f=μ,g=I,f∗g=ϵ。(参考)
inline ll GetSumu(int n)
{
if (n <= N)
return sumu[n];
if (Smu[n])
return Smu[n];
ll ret = 1ll;
for (int l = 2, r; l <= n; l = r + 1)
{
r = n / (n / l);
ret -= (r - l + 1) * GetSumu(n / l);
}
return Smu[n] = ret;
}
φ 的前缀和
因为 φ∗I=id,那么取 f=φ,g=I,f∗g=id。(参考)
inline ll GetSphi(int n)
{
if (n <= N)
return sump[n];
if (Sphi[n])
return Sphi[n];
ll ret = 1ll * n * (n + 1) / 2;
for (int l = 2, r; l <= n; l = r + 1)
{
r = n / (n / l);
ret -= (r - l + 1) * GetSphi(n / l);
}
return Sphi[n] = ret;
}
另附一更全面的筛法 Min_25
莫比乌斯函数
定义
μ 为莫比乌斯函数,定义为
μ(n)=⎩⎨⎧10(−1)kn=1n 含有平方因子k 为 n 的本质不同质因子个数
性质
莫比乌斯函数不仅是积性函数,还有如下性质(即 μ∗1=ϵ):
d∣n∑μ(d)={10n=1n=1
结论
[gcd(i,j)=1]=d∣gcd(i,j)∑μ(d)
线性筛
由于 μ 函数为积性函数,因此可以线性筛莫比乌斯函数。
void getMu()
{
mu[1] = 1;
for (int i = 2; i <= n; ++i)
{
if (!flg[i])
p[++tot] = i, mu[i] = -1;
for (int j = 1; j <= tot && i * p[j] <= n; ++j)
{
flg[i * p[j]] = 1;
if (i % p[j] == 0)
{
mu[i * p[j]] = 0;
break;
}
mu[i * p[j]] = -mu[i];
}
}
}
莫比乌斯变换
设 f(n),g(n) 为两个数论函数。
根据 μ∗1=e,可以推出 f=f∗ϵ=f∗(μ∗1)=f∗μ∗1=(f∗1)∗μ。
形式一
如果有:
f(n)=d∣n∑g(d)
那么有:
g(n)=d∣n∑μ(d)f(dn)
这种形式下,数论函数 f(n) 称为数论函数 g(n) 的莫比乌斯变换,数论函数 g(n) 称为数论函数 f(n) 的莫比乌斯逆变换(反演)。
形式二
如果有:
f(n)=n∣d∑g(d)
那么有:
g(n)=n∣d∑μ(nd)f(d)
常见的几种反演形式
以下默认 n≤m。
形式一
i=1∑nj=1∑m[gcd(i,j)=1]=i=1∑nj=1∑mx∣i∑x∣j∑μ(x)=x=1∑ni=1∑nj=1∑m[x∣i][x∣j]μ(x)=x=1∑nμ(x)⌊xn⌋⌊xm⌋
数论分块即可 O(n) 预处理,O(n) 单次询问。
形式二
i=1∑nj=1∑mgcd(i,j)=i=1∑nj=1∑mx∣i∑x∣j∑φ(x)=x=1∑nφ(x)i=1∑nj=1∑m[x∣i][x∣j]=x=1∑nφ(x)⌊xn⌋⌊xm⌋
数论分块即可 O(n) 预处理,O(n) 单次询问。
形式三
i=1∑nj=1∑mf(gcd(i,j))=d=1∑nf(d)i=1∑nj=1∑m[gcd(i,j)=d]=d=1∑nf(d)i=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]=d=1∑nf(d)k=1∑⌊dn⌋μ(k)⌊dkn⌋⌊dkm⌋
令 dk=T,则:
=T=1∑n⌊Tn⌋⌊Tm⌋d∣T∑f(d)μ(dT)
数论分块即可 O(n) 预处理,O(n) 单次询问。
简单证明一下:
d=1∑np=1∑⌊dn⌋p=T=1∑np∣T∑p
有:
d=1∑np=1∑⌊dn⌋p=d=1∑np=1∑ndp[d∣p]=T=1∑np∣T∑p
证毕。
由上,也有:
d=1∑np=1∑⌊dn⌋pf(d)=T=1∑np∣T∑pf(dT)=T=1∑nd∣T∑dTf(d)
例题
求:
p∈primes∑x=1∑ny=1∑m[gcd(x,y)=p]
化简得:
p∈primes∑x=1∑⌊pn⌋y=1∑⌊pm⌋[gcd(x,y)=1]
根据:
d∣n∑μ(d)={10n=1n=1
有:
p∈primes∑x=1∑⌊pn⌋y=1∑⌊pm⌋k∣i,k∣j∑μ(k)
先枚举 k,有:
p∈primes∑k=1∑min(⌊pn⌋,⌊pm⌋)x=1∑⌊pn⌋y=1∑⌊pm⌋μ(k)[k∣i][k∣j]
那么就有:
p∈primes∑k=1∑min(⌊pn⌋,⌊pm⌋)⌊pkn⌋⌊pkm⌋μ(k)
设 T=pk,有:
T=1∑min(n,m)⌊Tn⌋⌊Tm⌋p∈primes,p∣T∑μ(pT)
求前缀和再数论分块即可。
CODE
求:
i=i1∑i2j=j1∑j2gcd(i,j)
考虑容斥,设 S(n,m)=i=1∑nj=1∑mgcd(i,j),则有:
ans=S(i2,j2)−S(i1−1,j2)−S(i2,j1−1)+S(i1−1,j1−1)
单看每一个 S,显然有:
i=1∑nj=1∑mgcd(i,j)=d=1∑nd×i=1∑nj=1∑m[gcd(i,j)=d]=d=1∑nd×i=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]=d=1∑nd×i=1∑⌊dn⌋j=1∑⌊dm⌋p∣gcd(i,j)∑μ(p)
枚举 p,有:
d=1∑nd×p=1∑⌊dn⌋i=1∑⌊pdn⌋j=1∑⌊pdm⌋p∣gcd(i,j)∑μ(p)=d=1∑np=1∑⌊dn⌋⌊pdn⌋⌊pdm⌋d×μ(p)
设 T=pd,有:
d=1∑np=1∑⌊dn⌋⌊Tn⌋⌊Tm⌋pT×μ(p)
再枚举 T,有:
T=1∑np∣T∑⌊Tn⌋⌊Tm⌋pT×μ(p)=T=1∑n⌊Tn⌋⌊Tm⌋p∣T∑pT×μ(p)=T=1∑n⌊Tn⌋⌊Tm⌋φ(T)
前半部分整除分块,后半部分线性筛即可。
CODE
求:
i=1∑nj=1∑md(i⋅j)
其中,有:
d(n)=i∣n∑1
首先,要了解 d 函数的一个特殊性质:
d(i⋅j)=x∣i∑y∣j∑[gcd(x,y)=1]
因此所求为:
i=1∑nj=1∑mx∣i∑y∣j∑[gcd(x,y)=1]=x=1∑ny=1∑m⌊xn⌋⌊ym⌋[gcd(x,y)=1]=x=1∑ny=1∑m⌊xn⌋⌊ym⌋p∣gcd(x,y)∑μ(p)=x=1∑ny=1∑m⌊xn⌋⌊ym⌋p=1∑n[p∣x][p∣y]μ(p)=p=1∑nμ(p)i=1∑⌊pn⌋j=1∑⌊pm⌋⌊ipn⌋⌊jpm⌋=p=1∑nμ(p)i=1∑⌊pn⌋⌊ipn⌋j=1∑⌊pm⌋⌊jpm⌋
CODE
求:
i=1∏nj=1∏ngcd(i,j)lcm(i,j)(mod104857601)
1≤n≤106。
化简式子,有:
i=1∏nj=1∏ngcd(i,j)lcm(i,j)=i=1∏nj=1∏ngcd(i,j)2i×j=(i=1∏nj=1∏ngcd(i,j))2i=1∏nj=1∏ni×j
先看上面那坨:
i=1∏nj=1∏ni×j=i=1∏nin×n!=(n!)n×i=1∏nin=(n!)n×(n!)n=(n!)2n
然后再看下面那坨:
i=1∏nj=1∏ngcd(i,j)=d=1∏ni=1∏nj=1∏n[gcd(i,j)==d]gcd(i,j)=d=1∏ndi=1∑nj=1∑n[gcd(i,j)==d]==d=1∏ndi=1∑⌊dn⌋j=1∑⌊dn⌋[gcd(i,j)==1]
先只看指数:
i=1∑⌊dn⌋j=1∑⌊dn⌋[gcd(i,j)==1]=i=1∑⌊dn⌋(2×j=1∑i[gcd(i,j)=1])−1=2×i=1∑⌊dn⌋φ(i)−1
所以原式可化为:
d=1∏nd(2×i=1∑⌊dn⌋φ(i))−12(n!)2n(modmod)
根据欧拉定理,当 gcd(a,m)=1 时,有 ab=ab mod φ(m)(modm)。
因为模数为质数,所以 φ(m)=m−1。
所以原式可进一步化为:
d=1∏nd(2×i=1∑⌊dn⌋φ(i))−1mod(mod−1)2(n!)2n(modmod)
CODE
求:
i=1∑nj=1∑np=1∑⌊jn⌋q=1∑⌊jn⌋[gcd(i,j)=1][gcd(p,q)=1]
1≤n≤2×109。
化简式子,有:
i=1∑nj=1∑np=1∑⌊jn⌋q=1∑⌊jn⌋[gcd(i,j)=1][gcd(p,q)=1]=i=1∑nj=1∑np=1∑nq=1∑n[gcd(i,j)=1][gcd(p,q)=j]=i=1∑np=1∑nq=1∑n[gcd(i,p,q)=1]=i=1∑np=1∑nq=1∑nd∣gcd(i,p,q)∑μ(d)=d=1∑ni=1∑np=1∑nq=1∑n[d∣i][d∣p][d∣q]μ(d)=d=1∑ni=1∑⌊dn⌋p=1∑⌊dn⌋q=1∑⌊dn⌋μ(d)=d=1∑nμ(d)⌊dn⌋3
用杜教筛维护 μ 的前缀和即可。
时间复杂度 O(n32)。
CODE
求:
i=1∑nj=1∑nijgcd(i,j)
按照套路,化简式子,有:
i=1∑nj=1∑nijgcd(i,j)=d=1∑nd3i=1∑nj=1∑mdi⋅dj[gcd(i,j)=d]=d=1∑nd3i=1∑⌊dn⌋j=1∑⌊dn⌋i⋅j[gcd(i,j)=1]=d=1∑nd3i=1∑⌊dn⌋j=1∑⌊dn⌋i⋅jp=1∑⌊dn⌋μ(p)[p∣i][p∣j]=d=1∑nd3i=1∑⌊dn⌋j=1∑⌊dn⌋i⋅jp=1∑⌊dn⌋μ(p)[p∣i][p∣j]=d=1∑nd3p=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋i[p∣i]j=1∑⌊dn⌋j[p∣j]=d=1∑nd3p=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋i[p∣i]j=1∑⌊dn⌋j[p∣j]=d=1∑nd3p=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋i[p∣i]2=d=1∑nd3p=1∑⌊dn⌋μ(p)p2s(⌊pdn⌋)2=T=1∑ns(⌊Tn⌋)2p∣T∑μ(p)(pT)3p2=T=1∑ns(⌊Tn⌋)2T2p∣T∑μ(p)pT=T=1∑ns(⌊Tn⌋)2T2φ(T)s(n)=i=1∑ni=2i×(i−1)
T=1∑nT2φ(T) 用杜教筛即可。
CODE
求:
a1=L∑Ra2=L∑R⋯an=L∑R[i=1gcdn(ai)=K]
满足 1≤n,K≤109,1≤L≤R≤109,R−L≤105。
显然,定义 l=⌈KL⌉,r=⌊KR⌋,原式等于:
a1=l∑ra2=l∑r⋯an=l∑r[i=1gcdn(ai)=1]=a1=l∑ra2=l∑r⋯an=l∑rp∣i=1gcdn(ai)∑μ(p)=p=1∑rμ(p)(⌊pr⌋−⌊pl−1⌋)n
最后杜教筛维护 μ 的前缀和即可。
CODE
求:
i=1∑nj=1∑mgcd(i,j)k
按照套路,化简式子,有:
i=1∑nj=1∑mgcd(i,j)k=d=1∑ndki=1∑nj=1∑m[gcd(i,j)=d]=d=1∑ndki=1∑⌊dn⌋j=1∑⌊dn⌋[gcd(i,j)=1]=d=1∑ndki=1∑⌊dn⌋j=1∑⌊dn⌋p=1∑⌊dn⌋μ(p)[p∣i][p∣j]d=1∑ndkp=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋[p∣i]j=1∑⌊dm⌋[p∣j]=d=1∑ndkp=1∑⌊dn⌋μ(p)×⌊dpn⌋⌊dpm⌋=T=1∑n⌊Tn⌋⌊Tm⌋d∣T∑dkμ(dT)
设 g(n)=d∣n∑dkμ(dn),显然 g 是个乘性函数,线性筛即可。
CODE
求:
i=1∑nj=1∑ngcd(i,j)i+j
先化简原式,有:
i=1∑nj=1∑ngcd(i,j)i+j=d=1∑ni=1∑nj=1∑ndi+j[gcd(i,j)=d]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dn⌋dd⋅(i+j)[gcd(i,j)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dn⌋dd⋅(i+j)p∣gcd(i,j)∑μ(p)=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋j=1∑⌊dn⌋dd⋅(i+j)[p∣i][p∣j]=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊pdn⌋j=1∑⌊pdn⌋ddp⋅(i+j)=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊Tn⌋j=1∑⌊Tn⌋dT⋅(i+j)=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊Tn⌋(dT)ij=1∑⌊Tn⌋(dT)j=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊Tn⌋(dT)i2T=dp
再看后面那部分,令 x=pTT。
设 Sn 为等比数列前 n 项和,则有:
Sn=S⌊2n⌋(1+a⌊2n⌋)+an[2∤n]
即可 O(logn) 求解。
时间复杂度 O(nlogn)。
CODE
求(对 20101009 取模):
i=1∑nj=1∑mlcm(i,j)
易得:
i=1∑nj=1∑mgcd(i,j)i⋅j
枚举最大公因数 d,有:
i=1∑nj=1∑md∣i,d∣jgcd(di,dj)=1∑di⋅j
又有:
d=1∑min(n,m)d⋅i=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]i⋅j
由:
d∣n∑μ(d)=[n=1]
得:
d=1∑min(n,m)d⋅i=1∑⌊dn⌋j=1∑⌊dm⌋i⋅ja∣gcd(i,j)∑μ(a)
合并得:
d=1∑min(n,m)d⋅t=1∑⌊dn⌋t2μ(t)S(⌊dtn⌋)S(⌊dtm⌋)
其中:
S(n)=2n⋅(n+1)
设 T=dt,有:
T=1∑min(n,m)S(⌊Tn⌋)S(⌊Tm⌋)a∣T∑a⋅(aT)2μ(aT)
即:
T=1∑min(n,m)S(⌊Tn⌋)S(⌊Tm⌋)Tb∣T∑bμ(b)
设 f(T)=b∣T∑bμ(b),易知 f(n) 为积性函数,且满足:
f(p)=1−p,f(pk)=f(p),p∈primes
求前缀和再数论分块即可。
CODE
求:
i=1∑nj=1∑n(i+j)kf(gcd(i,j))gcd(i,j)
其中 f 函数定义如下:
如果 k 有平方因子 f(k)=0,否则 f(k)=1。
不难发现 f(n)=μ(n)2。
化简式子,有:
i=1∑nj=1∑m(i+j)kf(gcd(i,j))gcd(i,j)=i=1∑nj=1∑n(i+j)kμ(gcd(i,j))2gcd(i,j)=d=1∑ni=1∑nj=1∑n(i+j)kμ(d)2d[gcd(i,j)=d]=d=1∑ndk+1μ(d)2i=1∑⌊dn⌋j=1∑⌊dn⌋(i+j)kp∣gcd(i,j)∑μ(p)=d=1∑ndk+1μ(d)2i=1∑⌊dn⌋j=1∑⌊dn⌋(i+j)kp=1∑⌊dn⌋μ(p)[p∣i][p∣j]=d=1∑ndk+1μ(d)2p=1∑⌊dn⌋μ(p)i=1∑⌊pdn⌋j=1∑⌊pdn⌋(ip+jp)k=d=1∑ndk+1μ(d)2p=1∑⌊dn⌋μ(p)pki=1∑⌊pdn⌋j=1∑⌊pdn⌋(i+j)k=d=1∑ndk+1μ(d)2p=1∑⌊dn⌋μ(p)pkS(⌊dpn⌋)=T=1∑nS(⌊Tn⌋)d∣T∑dk+1μ(d)2μ(dT)(dT)k=T=1∑nS(⌊Tn⌋)d∣T∑dμ(d)2μ(dT)TkS(n)=i=1∑nj=1∑n(i+j)k
令 f(n)=d∣n∑dμ(d)2μ(dn)。
这显然是积性函数,考虑线性筛。
再看 S(n),设 f(n)=i=1∑nik,g(n)=i=1∑nf(i),不难发现:
S(n)=i=n+1∑2nf(i)−i=1∑nf(i)=g(2×n)−2×g(n)
预处理即可。
修改一下可过 加强版。
P6156 简单题 CODE
P6222 「P6156 简单题」加强版 CODE
给定一个 无限大 的矩阵 A,其中 Ai,j=ijgcd(i,j)。
接下来有 m 个操作,每行 1 至 3 个整数,意义如下:
- 1:对矩阵 A 进行高斯消元,使之成为一个上三角矩阵。(注意:这里,高斯消元中只允许将一行的某一个倍数加到另一行上,不允许交换任意两行,不允许将某行乘上一个倍数,保证这样之后仍然可以得到上三角矩阵,并且保证消元之后的矩阵的每个元素均为非负整数。)
- 2 x y:求出当前矩阵的 Ax,y。
- 3 x:求出 i=1∑xj=1∑xAi,j。
- 4 x:设 B 是一个 x 阶矩阵,其中 Bi,j=Ai,j,你需要求出 detB。
上述所有答案对 998244353 取模。
首先,对于矩阵 A 满足 Ai,j=ijgcd(i,j),在进行高斯消元后,有:
Ai,j′={ijφ(i)0i∣ji∤j
对于矩阵 B,满足 Bi,j=gcd(i,j),在进行高斯消元后,有:
Bi,j′={φ(i)0i∣ji∤j
那么,对于 1 操作前的 2 操作答案为 ijgcd(i,j),对于 1 操作后的 2 操作答案为 ijφ(i)。
再看 1 操作前的 3 操作,答案为:
i=1∑nj=1∑nijgcd(i,j)=d=1∑ndi=1∑nj=1∑nij[gcd(i,j)=1]=d=1∑nd3i=1∑⌊dn⌋j=1∑⌊dn⌋ij[gcd(i,j)=1]=d=1∑nd3i=1∑⌊dn⌋j=1∑⌊dn⌋ijp∣gcd(i,j)∑μ(p)=d=1∑nd3p=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋j=1∑⌊dn⌋ij=d=1∑nd3p=1∑⌊dn⌋p2μ(p)i=1∑⌊pdn⌋j=1∑⌊pdn⌋ij=d=1∑nd3p=1∑⌊dn⌋p2μ(p)i=1∑⌊pdn⌋i2d=1∑ndp=1∑⌊dn⌋(pd)2μ(p)i=1∑⌊pdn⌋i2
设 f(n)=(i=1∑ni)2,则有:
d=1∑ndp=1∑⌊dn⌋(pd)2μ(p)f(⌊pdn⌋)
设 T=pd,有:
T∑nT2f(⌊Tn⌋)d∣T∑dμ(dT)
根据狄利克雷卷积,有:
T∑nT2f(⌊Tn⌋)φ(T)
数论分块套杜教筛即可。
对于 1 操作后的 3 操作,设 g(n) 为第 n 列的和,那么有:
g(n)=nd∣n∑dφ(d)
设 h(n)=d∣n∑dφ(d),显然, h(n) 是个积性函数,线性筛即可。
答案即为:
i=1∑ng(i)=i=1∑n(i×h(i))
对于操作 4,行列式即消元后主对角线上元素乘积,所以答案即为:
i=1∏ni2φ(i)
CODE
令 S(a,b)=i=1∏aj=1∏blcm(a,b)lcm(a,b)。
求:
S(r,l−1)×S(l−1,r)S(r,r)×S(l−1,l−1)
不妨设 a≤b。
令 dp=t,则有:
S(a,b)=i=1∏aj=1∏blcm(a,b)lcm(a,b)=i=1∏aj=1∏bgcd(a,b)ij(gcd(a,b)ij)=d=1∏ai=1∏aj=1∏bdij(dij)[gcd(i,j)=d]=d=1∏ai=1∏⌊da⌋j=1∏⌊db⌋(ijd)ijd[gcd(i,j)=1]=d=1∏ai=1∏⌊da⌋j=1∏⌊db⌋(ijd)ijdp=1∑⌊da⌋μ(p)[p∣i][p∣j]=d=1∏ap=1∏⌊da⌋i=1∏⌊da⌋[p∣i]j=1∏⌊db⌋[p∣j](ijd)ijdμ(p)=d=1∏ap=1∏⌊da⌋i=1∏⌊dpa⌋j=1∏⌊dpb⌋(ijdp2)ijdp2μ(p)=t=1∏ap∣t∏i=1∏⌊ta⌋j=1∏⌊tb⌋(ijtp)ijtpμ(p)
令 s(x)=i=1∑xi=2x(x+1),f(x)=i=1∏xii,则有:
i=1∏nj=1∏m(ij)ij=f(n)s(m)×f(m)s(n)
令其为 G(n,m)。
另有:
i=1∏nj=1∏m(tp)ij=(tp)s(n)×S(m)
带回原式有:
t=1∏ap∣t∏(G(⌊ta⌋,⌊tb⌋)×(tp)s(⌊ta⌋)×s(⌊tb⌋))pμ(p)t
另 h(x)=d∣x∑dμ(d),y(x)=d∣x∏ddμ(d),则有:
t=1∏aG(⌊ta⌋,⌊tb⌋)t⋅h(t)×(th(t)×y(t))t×s(⌊ta⌋)×s(⌊tb⌋)
再令 hh(x)=x×h(x),yy(x)=(xh(x)×y(x))x,可得:
t=1∏aG(⌊ta⌋,⌊tb⌋)hh(t)×yy(t)s(⌊ta⌋)×s(⌊tb⌋)
最后前缀和 + 前缀积 + 数论分块即可。
再加一个小优化,设一个阈值 S,对于 1≤t<S 的直接暴力算,因为这部分 l,r 相差较小。
对于 S≤t≤n 的,再数论分块算。
CODE
求:
i=1∏nj=1∏mfgcd(i,j)
其中 f 表示斐波那契数列。
化简式子,有:
i=1∏nj=1∏mfgcd(i,j)=d=1∏ni=1∏nj=1∏nfd[gcd(i,j)=d]=d=1∏nfdi=1∑nj=1∑m[gcd(i,j)=d]=d=1∏nfdi=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]=d=1∏nfdi=1∑⌊dn⌋j=1∑⌊dm⌋p∣gcd(i,j)∑μ(p)=d=1∏nfdi=1∑⌊dn⌋j=1∑⌊dm⌋p=1∑⌊dn⌋μ(p)[p∣i][p∣j]=d=1∏nfdp=1∑⌊dn⌋μ(p)⌊pdn⌋⌊pdm⌋=T=1∏nd∣T∏fdμ(dT)⌊Tn⌋⌊Tm⌋
令 F(n)=d∣n∏fdμ(dn)。
则有:
T=1∏nF(T)⌊Tn⌋⌊Tm⌋
线性筛预处理前缀积即可。
CODE
最优解,嘿嘿。
求:
i=i1∑i2j=j1∑j2gcd(i,j)(mod109+7)
T 组数据。
其中,T≤50000,1≤i2,j2≤106。
首先设 S(n,m)=i=1∑nj=1∑mgcd(i,j)。
则 ans=S(i2,j2)+S(i1,j1)−S(i2,j1)−S(i1,j2)。
考虑化简 S(n,m),有:
S(n,m)=i=1∑nj=1∑mgcd(i,j)=d=1∑ndi=1∑nj=1∑m[gcd(i,j)=d]=d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]=d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋p∣gcd(i,j)∑μ(p)=d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋p=1∑⌊dn⌋μ(p)[p∣i][p∣j]=d=1∑ndp=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋j=1∑⌊dm⌋[p∣i][p∣j]=d=1∑ndp=1∑⌊dn⌋μ(p)⌊pdn⌋⌊pdm⌋=d=1∑ndp=1∑⌊dn⌋μ(p)⌊pdn⌋⌊pdm⌋=T=1∑np∣T∑μ(p)pT⌊Tn⌋⌊Tm⌋=T=1∑nφ(T)⌊Tn⌋⌊Tm⌋设 T=dp
这是 O(Tn) 的算法,且常数巨大。
考虑优化,发现:
ans=i=1∑nφ(i)(⌊ii2⌋−⌊ii1⌋)(⌊ij2⌋−⌊ij1⌋)n=min(i2,j2)
但是,还是过不了。
这里有一个好方法:预处理出 1∼N 的倒数,然后把除法改成乘法,优化常数,可过。
但还可以优化。
考虑根号分治。
我们发现这实际上是一个预处理和查询的平衡,因为我们发现,l 和 r 越大,相同一段长度就越大,暴力的复杂度就相对越劣(意思就是用整除分块处理越快),那么我们可以考虑在 l 和 r 较小的时候暴力,否则预处理。
详见代码。
CODE
求 x=1∑ny=1∑myx 在 k 进制下能表示成循环节从第一位小数开始的无限循环小数或整数的最简分数个数。
先思考怎么转换。
首先肯定满足 gcd(x,y)=1。
假设 yx 的循环节长度为 l,根据在 k 进制下的数乘以 kp 相当于将小数点往后挪 p 位,那么有:
{yxkl}={yx}
转换一下上面那个式子,有:
yxkl−⌊yxkl⌋xkl−⌊yxkl⌋⋅yxklklgcd(k,y)=yx−⌊yx⌋=x−⌊yx⌋⋅y≡x(mody)≡1(mody)=1
那么题意就可以转换为求:
i=1∑nj=1∑m[gcd(i,j)=1][gcd(j,k)=1]
先化简原式,有:
i=1∑nj=1∑m[gcd(i,j)=1][gcd(j,k)=1]=i=1∑nj=1∑m[gcd(j,k)=1]p∣gcd(i,j)∑μ(p)=i=1∑nj=1∑m[gcd(j,k)=1]p=1∑min(n,m)μ(p)[p∣i][p∣j]=p=1∑min(n,m)μ(p)i=1∑nj=1∑m[p∣i][p∣j][gcd(j,k)=1]=p=1∑min(n,m)μ(p)p∣i∑np∣j∑m[gcd(j,k)=1]=p=1∑min(n,m)μ(p)⌊pn⌋p∣j∑m[gcd(j,k)=1]=p=1∑min(n,m)μ(p)[gcd(p,k)=1]⌊pn⌋p=1∑⌊pm⌋[gcd(j,k)=1]
再设个函数,并化简:
f(n)=i=1∑n[gcd(i,k)=1]
思考,当 i>k 时,有 gcd(i,k)=gcd(i+k,k),那么答案肯定是呈现一个长度为 k 的循环,那么有:
f(n)=f(nmodk)+⌊kn⌋φ(k)
那么原式等于:
p=1∑min(n,m)⌊pn⌋f(⌊pm⌋)μ(p)[gcd(p,k)=1]
现在已经有整除分块了,然后是处理 i=1∑nμ(i)[gcd(i,k)=1] 前缀和的问题。
法一
设前面那个式子为 s(n,k)。
尝试化简 s(n,k),则有:
s(n,k)=i=1∑nμ(i)[gcd(i,k)=1]=i=1∑nμ(i)p=1∑min(n,k)μ(p)[p∣i][p∣k]=p∣k∑min(n,k)μ(p)p∣i∑nμ(i)=p∣k∑min(n,k)μ(p)i=1∑⌊pn⌋μ(ip)=p∣k∑min(n,k)μ(p)2i=1∑⌊pn⌋μ(i)[gcd(i,p)=1]=p∣k∑min(n,k)μ(p)2s(⌊pn⌋,p)
然后数论分块即可。
法二
这里是设前面那个式子为 s(n),则有:
s(n)=i=1∑nμ(i)[gcd(i,k)=1]=i=1∑n[gcd(i,k)=1]s(⌊in⌋)−i=2∑n[gcd(i,k)=1]s(⌊in⌋)
先看前面那个:
i=1∑n[gcd(i,k)=1]s(⌊in⌋)=i=1∑n[gcd(i,k)=1]j=1∑⌊in⌋μ(j)[gcd(j,k)=1]=i=1∑nj=1∑⌊in⌋μ(j)[gcd(ij,k)=1]=t=1∑nd∣t∑[gcd(t,k)=1]μ(d)=t=1∑n[gcd(t,k)=1][t=1]=1
那么最终有:
s(n)=1−i=2∑n[gcd(i,k)=1]s(⌊in⌋)
数论分块即可。
CODE
有一个表格,满足:
f(a,b)=f(b,a)b×f(a,a+b)=(a+b)×f(a,b)
且一开始 f(a,b)=a×b,然后带上一个单点修改操作。
每当修改了一个格子的数之后,为了让表格继续满足上述两个条件,你还需要把这次修改能够波及到的全部格子里都改为恰当的数。
你还需要随时输出前 k 行前 k 列这个有限区域内所有数的和 (mod109+7)。
考虑从下面那个式子得出一些可以反演的东西,有:
b×f(a,a+b)ab×f(a,a+b)a(a+b)f(a,a+b)abf(a,b)=(a+b)×f(a,b)=a(a+b)×f(a,b)=abf(a,b)=gcd(a,b)2f(gcd(a,b),gcd(a,b))
设 gcd(a,b)=d,则有:
abf(a,b)f(a,b)=d2f(d,d)=d2f(d,d)×ab
考虑到这个矩阵要变换,因为修改一个位置 (a,b) 的值后有且仅有 gcd(x,y)=d 的 (x,y) 位置的 f 值会跟着变化,那么用一个树状数组维护 f(d,d) 即可。
设 f(d,d)=g(d),再考虑答案:
ans=d=1∑ng(d)i=1∑nj=1∑ngcd(i,j)2ij[gcd(i,j)=d]=d=1∑ng(d)i=1∑⌊dn⌋j=1∑⌊dn⌋ij[gcd(i,j)=1]=d=1∑ng(d)i=1∑⌊dn⌋j=1∑⌊dn⌋ijp∣gcd(i,j)∑μ(p)=d=1∑ng(d)p=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋i[p∣i]j=1∑⌊dn⌋j[p∣j]=d=1∑ng(d)p=1∑⌊dn⌋μ(p)p2i=1∑⌊p⌊dn⌋⌋i2=d=1∑ng(d)p=1∑⌊dn⌋μ(p)p2S(⌊p⌊dn⌋⌋)2
设 G(n)=i=1∑ni2μ(i)S(⌊in⌋)2,则原式等于:
d=1∑ng(d)G(⌊dn⌋)
根据 ⌊in⌋−⌊in−1⌋=[i∣n],有:
G(n)−G(n−1)=i∣n∑i2μ(i)(S(⌊in⌋)2−S(⌊in⌋−1)2=i∣n∑i2μ(i)(in)3=n2i∣n∑μ(i)in=n2φ(n)
那么有:
G(n)=i=1∑ni2φ(i)
那么原式等于:
d=1∑ng(d)i=1∑⌊dn⌋i2φ(i)
线性筛,维护前缀和,再数论分块即可。
CODDE
求:
i=1∑nj=1∑mφ(ij)
先要考虑怎么把 φ 转成带有 gcd 或 lcm 的形式。
性质:φ(ij)=φ(gcd(i,j))φ(i)φ(j)gcd(i,j)。
证明:
φ(i)φ(j)=ip∣i∏pp−1jp∣j∏pp−1=ijp∣ij∏pp−1p∣gcd(i,j)∏pp−1p∈primes
所以有:
φ(i)φ(j)gcd(i,j)=ijp∣ij∏pp−1gcd(i,j)p∣gcd(i,j)∏pp−1=φ(ij)φ(gcd(i,j))
化简式子,有:
i=1∑nj=1∑mφ(ij)=i=1∑nj=1∑mφ(gcd(i,j))φ(i)φ(j)gcd(i,j)=d=1∑nφ(d)di=1∑nj=1∑mφ(i)φ(j)[gcd(i,j)=d]=d=1∑nφ(d)di=1∑⌊dn⌋j=1∑⌊dm⌋φ(id)φ(jd)[gcd(i,j)=1]=d=1∑nφ(d)dp=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋φ(id)[p∣i]j=1∑⌊dm⌋φ(jd)[p∣j]=d=1∑nφ(d)dp=1∑⌊dn⌋μ(p)i=1∑⌊kdn⌋φ(ikd)j=1∑⌊kdm⌋φ(jkd)=T=1∑nd∣T∑φ(d)dμ(pT)i=1∑⌊Tn⌋φ(iT)j=1∑⌊Tm⌋φ(jT)设 T=dp
设 f(n)=d∣n∑φ(d)dμ(pn),线性筛预处理即可,O(nlnn)。
设 g(k,n)=i=1∑nφ(i,k),显然 g(k,n)=g(k,n−1)+φ(nk)。
则原式等于:
T=1∑nf(T)×g(T,⌊Tn⌋)×g(T,⌊Tm⌋)
发现整除分块不了,考虑把整个式子设出来,令:
h(a,b,n)=t=1∑nf(t)×g(t,a)×g(t,b)
容易发现,这其实就是一个整除分块的首尾差分形式:
h(a,b,n)=⌊ln⌋=⌊rn⌋and⌊lm⌋=⌊rm⌋∑h(⌊rn⌋,⌊rm⌋,r)−h(⌊rn⌋,⌊rm⌋,l)
再考虑根号分治,我们设一个阈值 S,将所有 h(1,1,1)∼h(S,S,n) 的 h 值预处理出来。
预处理式子就是:
h(j,k,i)=h(j,k,i−1)+f(i)×g(i,j)×g(i,k)
对于 ⌊rn⌋≤S 可直接查询。
否则,可知 r≤⌊Sn⌋,数论分块计算即可。
CODE
求:
i=1∑nj=1∑mφ(gcd(i,j)lcm(i,j))mod23333
T 组数据,满足 T≤3×104,m≤n≤5×104。
下面默认 n≤m。
先化简原式,有:
i=1∑nj=1∑mφ(gcd(i,j)lcm(i,j))=i=1∑nj=1∑mφ(gcd(i,j)2i×j)=d=1∑ni=1∑nj=1∑mφ(d2i×j)[gcd(i,j)=d]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋φ(i×j)[gcd(i,j)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋φ(i)φ(j)[gcd(i,j)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋φ(i)φ(j)p∣gcd(i,j)∑μ(p)=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊dn⌋j=1∑⌊dm⌋φ(i)φ(j)[p∣i][p∣j]=d=1∑np=1∑⌊dn⌋μ(p)i=1∑⌊pdn⌋φ(ip)j=1∑⌊pdm⌋φ(jp)=T=1∑np∣T∑μ(p)i=1∑⌊Tn⌋φ(ip)j=1∑⌊Tm⌋φ(jp)
设:
G(x,y)=i=1∑xφ(iy)
暴力预处理即可。
那么原式等于:
T=1∑np∣T∑μ(p)G(⌊Tn⌋,p)G(⌊Tm⌋,p)
再设:
H(x,y,z)=i=1∑zp∣i∑μ(p)G(x,p)g(y,p)
然后跟 P4240 毒瘤之神的考验 差不多,将答案表示为关于 H 的差分加下取整的形式。
再考虑根号分治,我们设一个阈值,将所有范围内的 H 值递推预处理出来。
后面的再数论分块算。
CODE
关于本题的一种特别简便的做法 「题解」Luogu P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题
求:
i=1∏Aj=1∏Bk=1∏C(gcd(j,k)lcm(i,j))f(type)
其中 f(type) 的取值如下:
f(type)=⎩⎨⎧1i×j×kgcd(i,j,k)type=0type=1type=2
分析
显然,原式等于:
i=1∏Aj=1∏Bk=1∏C(gcd(i,j)×gcd(i,k)i×j)f(type)
发现每一项仅与两个变量有关,设:
f1(a,b,c)f2(a,b,c)=i=1∏aj=1∏bk=1∏cif(type)=i=1∏aj=1∏bk=1∏cgcd(i,j)f(type)
发现 ∏ 可以随意交换,则原式等价于:
f2(a,b,c)×f2(a,c,b)f1(a,b,c)×f1(b,a,c)
考虑在 type 取值不同时,如何快速求得 f1 与 f2。
type=0
f1(a,b,c)f2(a,b,c)=i=1∏aj=1∏bk=1∏ci=i=1∏aj=1∏bk=1∏cgcd(i,j)
对于 f1,显然有:
i=1∏aj=1∏bk=1∏ci=(i=1∏ai)b×c
预处理阶乘 + 快速幂即可,单次计算时间复杂度 O(logn)。
再考虑 f2,显然有:
==i=1∏aj=1∏bk=1∏cgcd(i,j)i=1∏aj=1∏bgcd(i,j)cd=1∏d(i=1∑aj=1∑b[gcd(i,j)=d])c
先看指数,有:
===i=1∑aj=1∑b[gcd(i,j)=d]i=1∑⌊da⌋j=1∑⌊db⌋[gcd(i,j)=1]i=1∑⌊da⌋j=1∑⌊db⌋k∣gcd(i,j)∑μ(k)k=1∑μ(k)⌊kda⌋⌊kdb⌋
则原式等于:
==d=1∏d(k=1∑μ(k)⌊kda⌋⌊kdb⌋)cd=1∏(dk=1∑μ(k))⌊kda⌋⌊kdb⌋cd=1∏k=1∏⌊dn⌋d(μ(k)⌊kda⌋⌊kdb⌋)c
设 t=kd,并枚举 t,有:
t=1∏nd∣t∏dμ(dt)⌊ta⌋⌊tb⌋c
显然,d∣t∏dμ(dt) 这块可以预处理。
复杂度 O(nlogn)。
数论分块 + 快速幂计算即可,单次时间复杂度 O(nlogn)。
type=1
f1(a,b,c)f2(a,b,c)=i=1∏aj=1∏bk=1∏cii×j×k=i=1∏aj=1∏bk=1∏cgcd(i,j)i×j×k
先考虑 f1,有:
i=1∏aj=1∏bk=1∏cii×j×k=i=1∏aj=1∏bi(i×j×k=1∑ck)=i=1∏aiiS(b)×S(c)
其中 S(n)=i=1∑n=2n×(n+1),可算 O(1) 算前缀和然后再用扩展欧拉定理降幂即可。
再考虑 f2,显然有:
=i=1∏aj=1∏bk=1∏cgcd(i,j)i×j×ki=1∏aj=1∏bgcd(i,j)i×jS(c)
然后枚举 gcd,原式等于:
d=1∏d(i=1∑aj=1∑bi×j[gcd(i,j)=d])S(c)
先看指数,有:
======i=1∑aj=1∑bi×j[gcd(i,j)=d]d2i=1∑⌊da⌋j=1∑⌊db⌋i×j[gcd(i,j)=1d2i=1∑⌊da⌋ij=1∑⌊db⌋jt∣gcd(i,j)∑μ(t)d2i=1∑⌊da⌋ij=1∑⌊db⌋jk∣gcd(i,j)∑μ(k)d2k=1∑μ(k)i=1∑⌊da⌋i[k∣i]j=1∑⌊db⌋j[k∣j]d2k=1∑k2μ(k)i=1∑⌊kda⌋ij=1∑⌊kdb⌋jd2k=1∑k2μ(k)S(⌊kda⌋)S(⌊kdb⌋)
则原式等于:
d=1∏d(d2k=1∑k2μ(k)S(⌊kda⌋)S(⌊kdb⌋))S(c)
设 t=kd,并枚举 t,有:
==d=1∏k=1∏⌊dn⌋d(d2k2μ(k))(S(⌊kda⌋)S(⌊kdb⌋))S(c)t=1∏d∣t∏d(d2(dt)2μ(dt))S(⌊ta⌋)S(⌊tb⌋)S(c)t=1∏d∣t∏d(t2μ(dt))S(⌊ta⌋)S(⌊tb⌋)S(c)
显然,d∣t∏d(t2μ(dt)) 这块可以预处理。
复杂度 O(nlog2n)。
数论分块 + 快速幂计算即可,单次时间复杂度 O(nlogn)。
type=2
f1(a,b,c)f2(a,b,c)=i=1∏aj=1∏bk=1∏cigcd(i,j,k)=i=1∏aj=1∏bk=1∏cgcd(i,j)gcd(i,j,k)
直接考虑原式:
i=1∏aj=1∏bk=1∏c(gcd(i,k)lcm(i,j))gcd(i,j,k)
取 ln 有:
i=1∑aj=1∑bk=1∑cln(gcd(i,k)lcm(i,j))gcd(i,j,k)=d=1∑min(a,b,c)φ(d)i=1∑⌊da⌋j=1∑⌊db⌋k=1∑⌊dc⌋ln(gcd(id,kd)lcm(id,jd))=d=1∑min(a,b,c)φ(d)i=1∑⌊da⌋j=1∑⌊db⌋k=1∑⌊dc⌋ln(gcd(i,k)lcm(i,j))
取 exp 有:
d=1∏min(a,b,c)i=1∏⌊da⌋j=1∏⌊db⌋k=1∏⌊dc⌋gcd(i,k)lcm(i,j)φ(d)
可以发现中间那部分其实就是 type=0 时的答案。
于是可以先对外层整除分块,再对内层整除分块。
CODE
P8570 [JRKSJ R6] 牵连的世界
link
番外
一些根号分治和优化除法。
参考资料
感谢 mango09 神仙的帮助。