关于积性函数求和的几种方法 未完待续

前言:之前一直没有系统的学习过积性函数相关的知识,这方面过于依赖队友,从而不知不觉降低了对自己的要求,深感惭愧,因此补上。

参考文献:国家集训队2016论文集 - 任之洲

1.定义
1.1 定义域为正整数,陪域为复数域的函数是数论函数,以下所讨论的都是数论函数。
1.2 若f(x)为数论函数,且对于任何互质数a, b,满足f(a)*f(b) = f(a*b),则f(x)为积性函数
1.3 若f(x)为数论函数,且对于任意正整数a, b, 满足f(a)*f(b) = f(a*b),则f(x)为完全积性函数

μ μ ,莫比乌斯函数。
ϵ ϵ , 单位函数。

2. 线性筛
每个数只会被最小质因子给标记一次,考虑到这个因素,复杂度是O(n)的。

2.1 筛最小质因子

const int maxn = 11000000;
int tag[maxn], min_f[maxn];
vector<int> G;
void shai() {
    for(int i = 2; i < maxn; i++) {
        if(!tag[i]) G.push_back(i), min_f[i] = i;
        for(int j = 0; j < G.size() && i * G[j] < maxn; j++) {
            min_f[i*G[j]] = G[j];
            tag[i*G[j]] = 1;
            if(i % G[j] == 0) break;
        }
    }
}

2.2 线性筛积性函数

const int maxn = 11000000;
int tag[maxn], min_f[maxn];
vector<int> G;
void shai() {
    for(int i = 2; i < maxn; i++) {
        if(!tag[i]) G.push_back(i);
        for(int j = 0; j < G.size() && i * G[j] < maxn; j++) {
            tag[i*G[j]] = 1;
            if(i % G[j] == 0) {
                //G[j]与i不互质,此时利用函数性质计算
                break;
            }
            //G[j]与i互质,此时利用积性函数性质递推
            f[G[j]*i] = f[G[j]]*f[i];
        }
    }
}

3. 莫比乌斯反演

3.1 Dirichlet卷积
为了证明莫比乌斯反演,我们需要先清楚什么是Dirichlet卷积。
定义:对于两个数论函数f(x), g(x)的Dirichlet卷积,写作 (fg)(x) ( f ∗ g ) ( x )

(fg)(x)=d|nf(d)g(nd) ( f ∗ g ) ( x ) = ∑ d | n f ( d ) g ( n d )

Dirichlet卷积满足:
1. 交换律 fg=gf f ∗ g = g ∗ f
2. 单位元 ϵf=f ϵ ∗ f = f
至于我们为什么要知道这个呢?因为我们需要用到这个东西去帮助我们证明莫比乌斯反演。

3.2 莫比乌斯反演
引理: μ1=ϵ μ ∗ 1 = ϵ ,即为

d|nμ(d)=ϵ(n) ∑ d | n μ ( d ) = ϵ ( n )

Proof:设n有k种不同的质因子,因此结合莫比乌斯函数的性质,我们只需要考虑n的因子中能对答案有贡献的这部分即可。
d|nμ(d)=i=0k(1)kC(k,i) ∑ d | n μ ( d ) = ∑ i = 0 k ( − 1 ) k C ( k , i )

随后把这部分二项式展开
i=0k(1)kC(k,i)=(11)k=ϵ ∑ i = 0 k ( − 1 ) k C ( k , i ) = ( 1 − 1 ) k = ϵ

定理:如果两个数论函数f, g满足

f(n)=d|ng(d) f ( n ) = ∑ d | n g ( d )

则他们也满足
g(n)=d|nμ(nd)f(d) g ( n ) = ∑ d | n μ ( n d ) f ( d )

f=g1<==>g=μf f = g ∗ 1 <==> g = μ ∗ f

Proof:

f=g1 f = g ∗ 1

两侧卷上 μ μ ,由上述引理和Dirichlet卷积的交换律,单位元可得
uf=ug1<==>uf=ϵg<==>uf=g u ∗ f = u ∗ g ∗ 1 <==> u ∗ f = ϵ ∗ g <==> u ∗ f = g

未完待续..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值