(2)式中符号*代表卷积, Id 函数代表 Id(n)=n ;他们的卷积是 ϕ(n) ,下面给出证明:
由于 μ,Id 都是积性函数,所以他们卷积也是积性函数.
令 n=∏si=1pkii 那么:
对比(1),(3)式子,感觉很相似,可是在推导过程从莫比乌斯反演然后卷积才得出欧拉函数,感觉是绕了一下,不知有没有更好的推导方法。
后来发现原来第一步可以这样化简:
这里简单补一个证明:
∑k|nϕ(k)=n
ϕ(n) 是积性函数,同样设 n=∏si=1pkii
那么有:
∑k|nϕ(k)=∏si=1∑kij=0ϕ(pji)=∏si=1(1+∑kij=1(pji−pj−1i))=∏si=1pkii=n
所以其实对于gcd的某些问题,用欧拉函数处理要比反演要优。mark。
相关代码:
const int maxn = 1000006;
int prime[maxn];
int phi[maxn];
void getP();//欧拉函数打表,之后要和i^4相乘再求前缀和
int sum2[maxn];//∑i^2
int main()
{
//...
int ans=0;
if(n>m) swap(n,m);
for(int i=1,j;i<=n;i=j+1)
{
j=min(m/(m/i),n/(n/i));
ans+=(phi[j]-phi[i-1])*sum2[m/i]*sum2[n/i];//这里还没考虑溢出
ans%=mod;
}
//...
}