題解 P4449 【於神之怒加強版】

給定n,m,k,計算

i=1nj=1mgcd(i,j)k\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k

10000000071000000007 取模的結果

前置知識

式子還是正常的推

首先,IDk(x)=xkID_k(x)=x^k

i=1nj=1mIDk(gcd(i,j))\sum_{i=1}^{n} \sum_{j=1}^{m} ID_k(gcd(i,j))

d=1IDk(d)i=1nj=1m[gcd(i,j)=d]\sum_{d=1} ID_k(d)\sum_{i=1}^{n} \sum_{j=1}^{m} [\gcd(i,j) =d]

d=1IDk(d)i=1ndj=1md[gcd(i,j)=1]\sum_{d=1} ID_k(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor} [\gcd(i,j) =1]

d=1IDk(d)i=1ndj=1mdDgcd(i,j)μ(D)\sum_{d=1} ID_k(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor} \sum_{D\mid \gcd(i,j)} \mu(D)

d=1IDk(d)D=1min(n,m)μ(D)i=1ndDj=1mdD1\sum_{d=1} ID_k(d)\sum_{D=1}^{\min(n,m)}\mu(D)\sum_{i=1}^{\lfloor\frac{n}{dD}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{dD}\rfloor} 1

d=1IDk(d)D=1ndμ(D)ndDmdD\sum_{d=1} ID_k(d)\sum_{D=1}^{\lfloor \frac{n}{d}\rfloor}\mu(D)\lfloor \frac{n}{dD} \rfloor \lfloor \frac{m}{dD} \rfloor

T=dDT=dD
T=1nTmTdTIDk(d)μ(Td)\sum_{T=1}\lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \sum_{d|T} ID_k(d) \mu(\frac{T}{d})
我們發現後面這個東西就是狄利克雷卷積

我們管它叫 ff 函數

也就是說

f=IDkμf=ID_k*\mu

由於積性函數卷積性函數還是積性函數

對於 xprimex\in prime f(x)=xk1f(x)=x^k-1

這樣子就直接在線性篩的時候算一下就好了

代碼:

void sieve(){
    f[1]=1;
    for(int i=2;i<MAXN;i++){
        if(!vis[i]){
            prime[++prime[0]]=i;
            f[i]=(pw(i,k)-1+Mod)%Mod;
        }
        for(int j=1;j<=prime[0]&&i*prime[j]<MAXN;j++){
            vis[i*prime[j]]=true;
            if(i%prime[j]==0){f[i*prime[j]]=f[i]*(f[prime[j]]+1)%Mod;break;}
            f[i*prime[j]]=f[i]*f[prime[j]]%Mod;
        }
    }
    for(int i=1;i<MAXN;i++)s[i]=(s[i-1]+f[i])%Mod;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章