tsy‘s number(莫比乌斯反演+狄利克雷卷积+欧拉筛+数论分块)

在这里插入图片描述

再化简公式前,先介绍一下强化版的欧拉函数积性公式
ϕ ( n m ) = ϕ ( n ) ϕ ( m ) G C D ( n , m ) ϕ ( G C D ( n , m ) ) \phi(nm)=\phi(n)\phi(m)\frac{GCD(n,m)}{\phi(GCD(n,m))} ϕ(nm)=ϕ(n)ϕ(m)ϕ(GCD(n,m))GCD(n,m)

如下是详细的化简过程
原式 = ∑ i = 1 n ∑ j = 1 n ∑ k = 1 n j k 2 ϕ ( g c d ( i , j , k ) ) = \sum\limits _{i=1}^{n}\sum\limits _{j=1}^{n}\sum\limits _{k=1}^{n}jk^{2}\phi (gcd(i,j,k)) =i=1nj=1nk=1njk2ϕ(gcd(i,j,k))

= ∑ d = 1 n ϕ ( d ) ∑ i = 1 n ∑ j = 1 n ∑ k = 1 n j k 2 [ g c d ( i , j , k ) = d ] =\sum\limits _{d=1}^{n}\phi (d)\sum\limits _{i=1}^{n}\sum\limits _{j=1}^{n}\sum\limits _{k=1}^{n}jk^{2}[gcd(i,j,k)=d] =d=1nϕ(d)i=1nj=1nk=1njk2[gcd(i,j,k)=d]

= ∑ d = 1 n ϕ ( d ) d 3 ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k = 1 ⌊ n d ⌋ j k 2 [ g c d ( i , j , k ) = 1 ] =\sum\limits _{d=1}^{n}\phi (d) d^{3}\sum\limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor}j k^{2}[gcd(i,j,k)=1] =d=1nϕ(d)d3i=1dnj=1dnk=1dnjk2[gcd(i,j,k)=1]

f ( x ) = ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k = 1 ⌊ n d ⌋ j k 2 [ g c d ( i , j , k ) = x ] f(x)=\sum\limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor}j k^{2}[gcd(i,j,k)=x] f(x)=i=1dnj=1dnk=1dnjk2[gcd(i,j,k)=x]

又设 g ( x ) = ∑ x ∣ d f ( d ) = ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k = 1 ⌊ n d ⌋ j k 2 [ x ∣ g c d ( i , j , k ) ] g(x)=\sum\limits _{x|d}^{ }f(d)=\sum\limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{j=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits _{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor}j k^{2}[x|gcd(i,j,k)] g(x)=xdf(d)=i=1dnj=1dnk=1dnjk2[xgcd(i,j,k)]

g ( x ) = x 3 ∑ i = 1 ⌊ n x d ⌋ ∑ j = 1 ⌊ n x d ⌋ ∑ k = 1 ⌊ n x d ⌋ j k 2 [ 1 ∣ g c d ( i , j , k ) ] g(x)=x^{3}\sum\limits _{i=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}\sum\limits _{j=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}\sum\limits _{k=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}j k^{2}[1|gcd(i,j,k)] g(x)=x3i=1xdnj=1xdnk=1xdnjk2[1gcd(i,j,k)]

= x 3 ∑ i = 1 ⌊ n x d ⌋ 1 ∑ j = 1 ⌊ n x d ⌋ j ∑ k = 1 ⌊ n x d ⌋ k 2 =x^{3}\sum\limits _{i=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}1\sum\limits _{j=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}j\sum\limits _{k=1}^{\left \lfloor \frac{n}{xd} \right \rfloor}k^{2} =x3i=1xdn1j=1xdnjk=1xdnk2

= x 3 ⌊ n x d ⌋ ( 1 + ⌊ n x d ⌋ ) ⌊ n x d ⌋ 2 ( 1 + ⌊ n x d ⌋ ) ⌊ n x d ⌋ ( 2 ⌊ n x d ⌋ + 1 ) 6 =x^{3} \left \lfloor \frac{n}{xd} \right \rfloor \frac{(1+\left \lfloor \frac{n}{xd} \right \rfloor) \left \lfloor \frac{n}{xd} \right \rfloor}{2} \frac{(1+\left \lfloor \frac{n}{xd} \right \rfloor) \left \lfloor \frac{n}{xd} \right \rfloor (2 \left \lfloor \frac{n}{xd} \right \rfloor+1)}{6} =x3xdn2(1+xdn)xdn6(1+xdn)xdn(2xdn+1)

莫比乌斯反演:
f ( x ) = ∑ x ∣ d μ ( d x ) ∗ g ( d ) f(x)=\sum\limits _{x|d}^{ }\mu(\frac{d}{x})*g(d) f(x)=xdμ(xd)g(d)

f ( 1 ) = ∑ 1 ∣ d μ ( d 1 ) g ( d ) = ∑ i = 1 ⌊ n d ⌋ μ ( d ) g ( d ) f(1)=\sum\limits _{1|d}^{ }\mu(\frac{d}{1}) g(d)=\sum\limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu(d) g(d) f(1)=1dμ(1d)g(d)=i=1dnμ(d)g(d)

原式 = ∑ d = 1 n ϕ ( d ) d 3 ∑ i = 1 ⌊ n d ⌋ μ ( i ) i 3 ⌊ n i d ⌋ ( 1 + ⌊ n i d ⌋ ) ⌊ n i d ⌋ 2 ( 1 + ⌊ n i d ⌋ ) ⌊ n i d ⌋ ( 2 ⌊ n i d ⌋ + 1 ) 6 = \sum\limits _{d=1}^{n}\phi (d) d^{3}\sum\limits _{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu (i) i^{3} \left \lfloor \frac{n}{id} \right \rfloor \frac{(1+\left \lfloor \frac{n}{id} \right \rfloor) \left \lfloor \frac{n}{id} \right \rfloor}{2} \frac{(1+\left \lfloor \frac{n}{id} \right \rfloor) \left \lfloor \frac{n}{id} \right \rfloor (2 \left \lfloor \frac{n}{id} \right \rfloor+1)}{6} =d=1nϕ(d)d3i=1dnμ(i)i3idn2(1+idn)idn6(1+idn)idn(2idn+1)

设T = id ,将 i 的求和变为 T 的求和:
∑ T = 1 n [ ⌊ n T ⌋ ( 1 + ⌊ n T ⌋ ) ⌊ n T ⌋ 2 ( 1 + ⌊ n T ⌋ ) ⌊ n T ⌋ ( 2 ⌊ n T ⌋ + 1 ) 6 ∑ d ∣ T ( T d ) 3 μ ( d ) d 3 ϕ ( T d ) ] \sum\limits _{T=1}^{n}\bigg[\left \lfloor \frac{n}{T} \right \rfloor \frac{(1+\left \lfloor\frac{n}{T} \right \rfloor) \left \lfloor \frac{n}{T} \right \rfloor}{2} \frac{(1+\left \lfloor \frac{n}{T} \right \rfloor) \left \lfloor \frac{n}{T} \right \rfloor (2 \left \lfloor\frac{n}{T} \right \rfloor+1)}{6} \sum\limits _{d|T}^{ }(\frac{T}{d})^{3}\mu (d) d^{3} \phi (\frac{T}{d})\bigg] T=1n[Tn2(1+Tn)Tn6(1+Tn)Tn(2Tn+1)dT(dT)3μ(d)d3ϕ(dT)]

先利用欧拉筛法求出右边的狄利克雷卷积,再用数论分块的方式求出整体的值。筛法的时间复杂度是o(n),求和的时间复杂度是o(n1/2),总的时间复杂度是o(n)。

先讲一下线性筛的思路:
f ( x ) = ∑ d ∣ x ( x d ) 3 ϕ ( x d ) μ ( d ) d 3 f(x)=\sum\limits _{d|x}^{ }(\frac{x}{d})^{3} \phi (\frac{x}{d}) \mu (d) d^{3} f(x)=dx(dx)3ϕ(dx)μ(d)d3

  1. x x x为素数时, f ( x ) = x 3 ( x − 2 ) f(x)=x^{3} (x-2) f(x)=x3(x2)
  2. x x x为合数时
    1. x x x只含一个素因子 p p p f ( x ) = f ( x p p ) = f ( x p ) f ( p ) f(x)=f(\frac{x}{p} p)=f(\frac{x}{p}) f(p) f(x)=f(pxp)=f(px)f(p)
    2. x x x含两个素因子 p p p
      1. x p 2 = 1 \frac{x}{p^{2}}=1 p2x=1时, f ( x ) = f ( x p 2 p 2 ) = f ( x p 2 ) f ( p 2 ) = f ( p 2 ) = p 6 ( p − 1 ) 2 f(x)=f(\frac{x}{p^{2}} p^{2})=f(\frac{x}{p^{2}}) f(p^{2})=f(p^{2})=p^{6} (p-1)^{2} f(x)=f(p2xp2)=f(p2x)f(p2)=f(p2)=p6(p1)2
      2. x p 2 ≠ 1 \frac{x}{p^{2}}\not=1 p2x=1时, f ( x ) = f ( x p 2 p 2 ) = f ( x p 2 ) f ( p 2 ) f(x)=f(\frac{x}{p^{2}} p^{2})=f(\frac{x}{p^{2}}) f(p^{2}) f(x)=f(p2xp2)=f(p2x)f(p2)
    3. x x x含三个及以上的素因子 p p p时, f ( x ) = ∑ d ∣ x ( x d ) 3 ϕ ( x d ) μ ( d ) d 3 = ∑ d ∣ x ( x p p d ) 3 ϕ ( x p p d ) μ ( d ) d 3 = p 4 ∑ d ∣ x p ( x p d ) 3 ϕ ( x p d ) μ ( d ) d 3 = p 4 f ( x p ) f(x)=\sum\limits _{d|x}^{ }(\frac{x}{d})^{3} \phi (\frac{x}{d}) \mu (d) d^{3}=\sum\limits _{d|x}^{ }(\frac{\frac{x}{p} p}{d})^{3} \phi (\frac{\frac{x}{p} p}{d}) \mu (d) d^{3}=p^{4} \sum\limits _{d|\frac{x}{p}}^{ }(\frac{\frac{x}{p}}{d})^{3} \phi (\frac{\frac{x}{p}}{d}) \mu (d) d^{3}=p^{4} f(\frac{x}{p}) f(x)=dx(dx)3ϕ(dx)μ(d)d3=dx(dpxp)3ϕ(dpxp)μ(d)d3=p4dpx(dpx)3ϕ(dpx)μ(d)d3=p4f(px)

注意:上述表达中,用函数表达的都是已经算过的,直接拿来用就行了

接下来再讲一下数论分块的思路
数论分块有一道经典的例题,计算 ∑ i = 1 n k ( m o d    i ) \sum\limits _{i=1}^{n}{k}(\mod{i}) i=1nk(modi)
n = k = 10 n=k=10 n=k=10为例, k ( m o d    i ) {k}(\mod{i}) k(modi)分布如下
10    5    3    2    2    1    1    1    1    1 10\;5\;3\;2\;2\;1\;1\;1\;1\;1 10532211111
这个序列是非递增序列,且有很多等值区间,可以证明最多有 2 k 2 \sqrt{k} 2k 个不同的数。那么可以化加法为乘法,一次性求出等值区间的和,将时间复杂度从 o ( n ) o(n) o(n),降为 o ( n 1 2 ) o(n^{\frac{1}{2}}) o(n21)

有了这个基础之后,就可以类似的思想对和式进行分块,可以降低时间复杂度。
注意:在模下作除法要谨慎,因为2、6与模不互素,求不了逆元,所以要先作除法再取模,因为这个wa了很多次555…

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll MAXN=1e7+10;
const ll MOD=1ll<<30;
ll FG[MAXN]={0,1},pri[MAXN],jud[MAXN],cnt,loop,n,sum;
ll QM(ll a,ll b){
    ll res=1,rem=a;
    while(b){
        if(b&1) res=(res*rem)%MOD;
        rem=(rem*rem)%MOD;
        b>>=1;
    }
    return res;
}
void euler(){
    memset(jud,0,sizeof(jud));
    cnt=0;
    for(ll i=2;i<MAXN;i++){
        if(!jud[i]){
            pri[cnt++]=i;
            FG[i]=QM(i,3)*(i-2)%MOD;
        }
        for(ll j=0;j<cnt&&i*pri[j]<MAXN;j++){
            jud[i*pri[j]]=1;
            if(i%pri[j]==0){
                if((i/pri[j])%pri[j]==0) FG[i*pri[j]]=FG[i]*QM(pri[j],4)%MOD;
                else if(i/pri[j]==1) FG[i*pri[j]]=QM(pri[j],6)*QM(pri[j]-1,2)%MOD;
                else FG[i*pri[j]]=FG[i/pri[j]]*FG[pri[j]*pri[j]]%MOD;
                break;
            }
            FG[i*pri[j]]=FG[i]*FG[pri[j]]%MOD;
        }
    }
    for(ll i=2;i<MAXN;i++) FG[i]=(FG[i]+FG[i-1])%MOD;
}
int main(){
    euler();
    scanf("%lld",&loop);
    while(loop--){
        scanf("%lld",&n);
        sum=0;
        for(ll i=1,r=0;i<=n;i=r+1){
            ll t=n/i;
            r=n/t;
            ll A=(1+t)*t/2;
            ll B=(2*t+1)%3?A/3%MOD*(2*t+1)%MOD:(2*t+1)/3%MOD*A%MOD;
            sum=(sum+(FG[r]-FG[i-1]+MOD)%MOD*t%MOD*(A%MOD)%MOD*B%MOD)%MOD;
        }
        printf("%lld\n",sum);
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值