积性函数的积性函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了积性函数的积性函数相关的知识,希望对你有一定的参考价值。

参考技术A

φ(n) -欧拉函数,
μ(n) -莫比乌斯函数,关于非平方数的质因子数目
gcd(n,k) -最大公因子,当k固定的情况
d(n) -n的正因子数目
σ(n) -n的所有正因子之和
σk(n) - 因子函数,n的所有正因子的k次幂之和,当中k可为任何复数。
1(n) -不变的函数,定义为 1(n) = 1 (完全积性)
Id(n) -单位函数,定义为 Id(n) = n(完全积性)
Idk(n) -幂函数,对于任何复数、实数k,定义为Idk(n) = n^k (完全积性)
ε(n) -定义为:若n = 1,ε(n)=1;若 n > 1,ε(n)=0。别称为“对于狄利克雷卷积的乘法单位”(完全积性)
λ(n) -刘维尔函数,关于能整除n的质因子的数目
γ(n),定义为γ(n)=(-1)^ω(n),在此加性函数ω(n)是不同能整除n的质数的数目
另外,所有狄利克雷特征均是完全积性的

积性函数筛法

积性函数筛法

很多常用的数论函数都是积性函数,而在题目中,我们常常需要线性(甚至更高)的筛法。

对于积性函数,我们可以在筛素数的基础上稍加修改,即可完成线性筛。

首先,注意到积性函数的特点:
[ f(xy)=f(x) imes f(y) ]
而可以线性筛的积性函数,需要知道以下两个式子的快速求法:
[ f(p)=?quad f(p^k)=?\pin prime ]
其中, (f(p)) 大多是直接定义,(f(p^k)) 大多是递归定义。

我们来回忆一下素数筛的过程:

inp[0]=inp[1]=1;
for(int i=2;i<=n;i++){
    if(!inp[i]){
        prime[++tot]=i;
    }
    for(int j=1;j<=tot && i*prime[j]<=n;j++){
        int tp=prime[j]*i;
        inp[tp]=1;
        if(i%prime[j]==0){
            break;
        }
    }
}

在线性筛素数的基础上,我们可以进行线性筛的修改。

首先,对于判定的质数 (p) ,可以直接给出定义的值。

之后,对于 (i\%p eq0) ,由于 (i)(p) 互质,可以直接用积性函数性质推得。

然后,对于 (i\%p == 0) :

  • (i) 内的最小素因子是 (p) ,此刻可以将 (i) 内的素因子都除掉,然后就可以用积性函数的性质来递推了。为此,我们要记录一个最小质因子的幂次 (low_i)

    那么递推式就可以表示为:(f(i imes p)=f(i/low_i) imes f(low_i imes p))

  • 此处还有一个特殊的判定,当 (i==low_i) 时,上式相当于没推,所以我们要用 (f(p^k)) 的递推来计算。

那么代码如下:

inp[0]=inp[1]=1;
f[1]=1;
for(int i=2;i<=n;i++){
    if(!inp[i]){
        prime[++tot]=i;
        f[i]=对质数的定义式;
        low[i]=i;
    }
    for(int j=1;j<=tot && i*prime[j]<=n;j++){
        int tp=prime[j]*i;
        inp[tp]=1;
        if(i%prime[j]==0){
            if(i!=low[i])
                f[tp]=f[i/low[i]]*f[low[i]*prime[j]];
            else
                f[tp]=对p的次幂的定义式;
            low[tp]=low[i]*prime[j];
            break;
        }
        f[tp]=f[i]*f[prime[j]];
        low[tp]=prime[j];
    }
}

缺点很明显,比较耗空间。(但是题目会给够的

当需要线性筛很多个积性函数时,可以同时进行。

这种基于素数筛的线性筛法,有时不止对积性函数有用,对于一些和素数有关的函数也可以筛出,具体在我写的莫比乌斯反演中有例子。


(frak by;thorn\_)

以上是关于积性函数的积性函数的主要内容,如果未能解决你的问题,请参考以下文章

算法专题积性函数

[模板] 积性函数 && 杜教筛

数论及其应用——积性函数问题

浅谈杜教筛

关于欧拉函数与莫比乌斯函数等一系列积性函数的线性筛

关于在线性筛中求积性函数