一些定理:
**1.**设
f
,
g
f,g
f,g为两个数论函数,
t
t
t为完全积性函数,若:
f
(
n
)
=
∑
i
=
1
n
t
(
i
)
g
(
⌊
n
i
⌋
)
f(n)=\sum_{i=1}^nt(i)g(\lfloor \frac{n}{i}\rfloor)
f(n)=i=1∑nt(i)g(⌊in⌋)
则:
g
(
n
)
=
∑
i
=
1
n
μ
(
i
)
t
(
i
)
f
(
⌊
n
i
⌋
)
g(n)=\sum_{i=1}^n\mu(i)t(i)f(\lfloor\frac{n}{i}\rfloor)
g(n)=i=1∑nμ(i)t(i)f(⌊in⌋)
证:
∑
i
=
1
n
μ
(
i
)
t
(
i
)
f
(
⌊
n
i
⌋
)
=
∑
i
=
1
n
μ
(
i
)
t
(
i
)
∑
k
=
1
⌊
n
i
⌋
t
(
k
)
g
(
⌊
n
i
k
⌋
)
\sum_{i=1}^n\mu(i)t(i)f(\lfloor\frac{n}{i}\rfloor) \\=\sum_{i=1}^n\mu(i)t(i)\sum_{k=1}^{\lfloor\frac{n}{i}\rfloor}t(k)g(\lfloor \frac{n}{ik}\rfloor)
i=1∑nμ(i)t(i)f(⌊in⌋)=i=1∑nμ(i)t(i)k=1∑⌊in⌋t(k)g(⌊ikn⌋)
枚举
g
g
g,设
j
=
i
k
j=ik
j=ik:
=
∑
j
=
1
n
g
(
⌊
n
j
⌋
)
∑
i
∣
j
μ
(
i
)
t
(
i
)
t
(
j
i
)
=
∑
j
=
1
n
g
(
⌊
n
j
⌋
)
t
(
j
)
∑
i
∣
j
μ
(
i
)
=\sum_{j=1}^ng(\lfloor\frac{n}{j}\rfloor)\sum_{i|j}\mu(i)t(i)t(\frac{j}{i}) \\=\sum_{j=1}^ng(\lfloor\frac{n}{j}\rfloor)t(j)\sum_{i|j}\mu(i)
=j=1∑ng(⌊jn⌋)i∣j∑μ(i)t(i)t(ij)=j=1∑ng(⌊jn⌋)t(j)i∣j∑μ(i)
我们是知道
μ
∗
1
=
e
\mu*1=e
μ∗1=e的,所以当j为1时不为0,所以显然。证毕
计算一些式子:
求:
S
(
n
)
=
∑
i
=
1
n
σ
0
(
i
2
)
S(n)=\sum_{i=1}^n\sigma_0(i^2)
S(n)=i=1∑nσ0(i2)
构造狄利克雷卷积,设
f
(
n
)
=
σ
0
(
n
2
)
,
g
(
n
)
=
2
ω
(
n
)
f(n)=\sigma_0(n^2),g(n)=2^{\omega(n)}
f(n)=σ0(n2),g(n)=2ω(n),(
ω
(
n
)
\omega(n)
ω(n)表示n的不同质因子的个数。)
则有:
f
=
g
∗
1
f=g*1
f=g∗1
显然有
g
=
μ
2
∗
1
g=\mu^2*1
g=μ2∗1
那么:
a
n
s
=
∑
i
=
1
n
f
(
i
)
=
∑
i
=
1
n
∑
j
∣
i
g
(
j
)
=
∑
j
=
1
n
g
(
j
)
⌊
n
j
⌋
ans=\sum_{i=1}^nf(i)=\sum_{i=1}^n\sum_{j|i}g(j)=\sum_{j=1}^ng(j)\lfloor\frac{n}{j}\rfloor
ans=i=1∑nf(i)=i=1∑nj∣i∑g(j)=j=1∑ng(j)⌊jn⌋
又:
∑
i
=
1
n
g
(
i
)
=
∑
i
=
1
n
∑
j
∣
i
μ
2
(
j
)
=
∑
i
=
1
n
μ
2
(
j
)
⌊
n
j
⌋
\sum_{i=1}^ng(i)=\sum_{i=1}^n\sum_{j|i}\mu^2(j)=\sum_{i=1}^n\mu^2(j)\lfloor\frac{n}{j}\rfloor
i=1∑ng(i)=i=1∑nj∣i∑μ2(j)=i=1∑nμ2(j)⌊jn⌋
又:
∑
i
=
1
n
μ
2
(
i
)
=
∑
i
=
1
⌊
n
⌋
μ
(
i
)
⌊
n
i
2
⌋
\sum_{i=1}^n\mu^2(i)=\sum_{i=1}^{\lfloor \sqrt n\rfloor}\mu(i)\lfloor\frac{n}{i^2}\rfloor
i=1∑nμ2(i)=i=1∑⌊n⌋μ(i)⌊i2n⌋
现在这样就可以搞了。(这个等式的证明暂时不会。。。)
19.1.3 update: 我也不知道当时怎么想的,现在看实际上就是比较简单的容斥而已就可以理解了。因为当时一直想从式子本身去找track点,但是发现很难。但是提炼一下式子的含义就是求1到n里非平方因子的个数,那么我们用容斥把只有含有因子的个数减掉就好,因为比如会出现重复减掉的情况所以,肯定要有加回来的操作,所以很显然就是容斥了,既然是平方因子,所以只需要枚举到
n
\sqrt n
n了。左边的
μ
(
i
)
\mu(i)
μ(i)和右边的
μ
(
i
)
\mu(i)
μ(i)的意义不一样。
计算最小质因子:
这个通过线性筛即可方便得到。
设一个prime数组为考虑了前i项之后所筛得的素数,默认从小到大,设
p
r
i
pr_i
pri为i的最小质因子。
算法进行如下:
1.枚举到第i为,若
p
r
i
pr_i
pri没有被计算那么,赋值
p
r
i
=
i
pr_i=i
pri=i
2.枚举所以小于等于
p
r
i
pr_i
pri的素数,设枚举变量为
p
p
p(实际上就在我们所以在的prime数组里),赋值
p
r
i
∗
p
=
p
pr_{i*p}=p
pri∗p=p
易证时间复杂度为
O
(
n
)
O(n)
O(n).
代码:
int pr[maxx];
int prime[maxx],cnt;
void init()
{
for(int i=2;i<maxx;i++)
{
if(!pr[i])
{
pr[i]=i;
prime[cnt++]=i;
}
for(int j=0;j<cnt&&(long long)i*prime[j]<maxx;j++)
{
pr[i*prime[j]]=prime[j];
if(i%prime[j]==0)break;
}
}
}