模板 - 数论函数

欧拉函数

单个欧拉函数:

线性筛:

杜教筛:

莫比乌斯函数

单个莫比乌斯函数:

线性筛:

前缀和:
除了使用线性筛之后进行统计,还可以使用杜教筛。
杜教筛:

因数个数函数\(d(n)\)

线性筛:

前缀和:
一次分块就可以求出来,比杜教筛还快,要什么杜教筛?

ll d(int n){
    ll ret=0;
    for(int l=1,r;l<=n;l=r+1){
        r=n/(n/l);
        ret+=(r-l+1)*(n/l);
    }
    return ret;
}

除数函数\(\sigma _{x}(n)\)

积性。
n的所有因子的x次方和。
\(\sigma _{0}(n)\) 0阶的除数函数就是 \(d(n)\)

其他遇到过的奇怪组合

\(id(n)*d(n)\)

非积性,因为这个是乘法不是卷积。
只讨论前缀和,类似\(d(n)\),每次贡献的式子带个公差罢了。

int sum(int a1,int an,int n){
    return (a1+an)*n/2;
}

ll id_d(int n){
    ll ret=0;
    for(int l=1,r;l<=n;l=r+1){
        r=n/(n/l);
        ret+=sum(1,n/l,n/l)*sum(l,r,r-l+1);
    }
    return ret;
}

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10965052.html