写在卸载之前
正在数论只会抄题解的道路上越行越远
正式开始
1.迪利克雷卷积
1)定义新运算(*)
注意这里(*)不是乘法
(h,f,g)都是函数名称
定义 (h=f*g)
[h=f*g=sum_{d|n}f(d)g(frac{n}{d})=sum_{d|n}f(frac{n}{d})g(d)
]
2)介绍几个函数
(a(x)):对于任意(x) 都有(a(x)=1)
(b(x)):对于任意(x) 都有(b(x)=x)
(e(x)):也被称之为单位元函数 对于任意(x) 都有(e(x)=[x=1])
乘法存在逆元 迪利克雷卷积也存在逆元
3)逆元
如果对于函数(f)存在
[f*g=e
]
那么我们就认为g为f的逆元
2.莫比乌斯反演
首先介绍一个函数 莫比乌斯函数(μ)
ta是(a(x)=1)函数的逆元
也就是$$μ*a=e$$
我们使用迪利克雷卷积$$μ*a=sum_{d|n}μ(d)a(frac{n}{d})=sum_{d|n}μ(d)=[n=1]$$
我们可以发现 μ的取值就是
[μ(n)=egin{cases}
1,n=1\
0,存在一个平方数是n的因子\
(-1)^m,n存在m个质因子\
end{cases}
]
当然 (μ)也是一个积性函数
可以使用线性筛求解
int mul[N],prime[N];
bool mark[N];
mul[1]=1;
for(int i=2;i<=n;++i)
{
if(!mark[i]) {prime[++tot]=i;mul[i]=-1;}
for(int j=1;j<=tot&&prime[j]*i<=n;++j)
{
mark[prime[j]*i]=1;
if(i%prime[j]==0)
{
mul[prime[j]*i]=0;
break;
}
else mul[prime[j]*i]=-mul[i];
}
}
我们接下来来具体化一个式子
[sum_{i=1}^{n}sum_{d|i}μ(d)
]
先枚举了i 再枚举i的所有约数 等于先枚举d再枚举[1,n]范围内的所有倍数
等价于$$sum_{d=1}^{n}lfloor{frac{n}{d}} floorμ(d)$$
从而我们得到了两个结论
[sum_{d|n}μ(n)=[n=1]
]
[sum_{i=1}^{n}sum_{d|i}μ(d)=sum_{d=1}^nlfloor{frac{n}{d}}
floorμ(d)
]
我们再来看看这个式子
[sum_{i=1}^nsum_{j=1}^m[gcd(i,j)=1]
]
我们使用结论1
[sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}μ(d)\ =sum_{i=1}^nsum_{j=1}^msum_{d|i}sum_{d|j}μ(d)\ =sum_{i=1}^nsum_{d|i}sum_{j=1}^msum_{d|j}μ(d)
]
使用结论2
[sum_{i=1}^nsum_{d|i}sum_{j=1}^msum_{d|j}μ(d)\ =sum_{d=1}^nlfloor{frac{n}{d}}
floorsum_{d=1}^mlfloor{frac{m}{d}}
floorμ(d)\ =sum_{d=1}^{min(n,m)}lfloor{frac{n}{d}}
floorlfloor{frac{m}{d}}
floorμ(d)
]
也就是
[sum_{i=1}^nsum_{j=1}^msum_{d|gcd(i,j)}μ(d)\ =sum_{d=1}^{min(n,m)}lfloor{frac{n}{d}}
floorlfloor{frac{m}{d}}
floorμ(d)
]
这个作为结论3
有了这三个结论
现在我们来做一道板子题
[sum_{i=1}^nsum_{j=1}^ngcd(i,j)\ =sum_{d=1}^ndsum_{i=1}^nsum_{j=1}^n[gcd(i,j)=d]\ =sum_{d=1}^ndsum_{i=1}^{lfloorfrac{n}{d}
floor}sum_{j=1}^{lfloorfrac{n}{d}
floor}[gcd(i,j)=1]
]
使用结论3 也就是
[sum_{d=1}^ndsum_{t=1}^{lfloorfrac{n}{d}
floor}μ(t){lfloorfrac{lfloorfrac{n}{d}
floor}{t}
floor}^2
]
具体代码的话 【点我领取代码】