数论函数(欧拉函数以及莫比乌斯反演)

· · 个人记录

数论菜狗鼓起勇气,学习了莫比乌斯反演之后,——发现自己连菜狗都不是。。。

一些基本的数论函数的定义

这几个数论函数都是积性函数,其中前三个为完全积性函数。

(积性函数满足f(a\times b)=f(a)\times f(b)gcd(a,b)=1,而完全积性函数满足f(a\times b)=f(a)\times f(b),无需满足gcd=1的条件)

狄利克雷卷积

(f*g)_{(n)}=\sum_{d|n}f(d)\times g(\frac{n}{d})

这东西满足交换律、结合律、分配律。

\varphi函数的定义

--- # $\varphi$的积性及证明 $\varphi$是一个积性函数 我们把$1-a\times b$这些数写成一个长方形: $\left(\begin{array}{cc}1&2&...&a\\a+1&a+2&...&2a\\.&.&...&.\\.&.&...&.\\.&.&...&.\\(b-1)a+1&(b-1)a+2...&...&ab\end{array}\right)

对于每一行:

对于每一列:

综上:\varphi(a\times b)=\varphi(a)\times\varphi(b),即\varphi为积性函数。

\varphi函数的一些性质

\varphi函数的求法

既然我们之前已经得出了\varphi的通项公式,那么现在就来想一想\varphi应该怎么来求吧。

听说这家伙又叫欧拉函数,那——,当然是用线性筛来求啦。

我们可以在用线筛求出质数的同时,把\varphi也给更新了。

代码:

void sieve(){
    varphi[1]=1;
    for(int i=2;i<=n;i++){
        if (!vis[i]) p[++p[0]]=i,varphi[i]=i-1;
        for (int j=1;j<=p[0]&&i*p[j]<=n;j++){
            vis[i*p[j]]=1;
            if (i%p[j]==0){
                varphi[i*p[j]]=varphi[i]*p[j];
                break;
            }
            varphi[i*p[j]]=varphi[i]*(p[j]-1);
        }
    }
}

\mu函数的定义

n=\prod_{i=1}^{k}p_i^{c_i}

\mu(n)=\left\{\begin{array}{rcl}1&n=1\\(-1)^k&\forall c_i,c_i\le1\\0&\exists c_i>1\end{array}\right.

\mu函数的一些性质

莫比乌斯反演

g(n)=\sum_{d|n}f(d)f(n)=\sum_{d|n}\mu(d)\times g(\frac{n}{d})

证明:

f(n)=\sum_{d|n}\mu(d)\times g(\frac{n}{d}) \ \ \ \ \ \ \ \ \ =\sum_{d|n}\mu(d)\sum_{i|\frac{n}{d}}f(i) \ \ \ \ \ \ \ \ \ =\sum_{i|n}f(i)\sum_{d|\frac{n}{i}}\mu(d) \ \ \ \ \ \ \ \ \ =\sum_{i|n}f(i)\times (\mu*1)_{[\frac{d}{i}]} \ \ \ \ \ \ \ \ \ =\sum_{i|n}f(i)\times\epsilon(\frac{n}{i}) \ \ \ \ \ \ \ \ \ =f(n)

证毕

其实还有别的形式:

g(n)=∑_{n|d}f(n)$,$f(n)=∑_{n|d}μ(d)g(\frac{d}{n})

证明类似,还请读者自行推导。