证明过程:

其反证类似的。具体数学中的习题啊。也当作大家的习题好了。

就是第二个恒等式。具体数学中是分了2步。那个用拉斐尔证明的4.9虽然说原理并不难。但是具体数学上用得简直有点出神入化让我有点摸不着头脑。

之后一步是利用第一个恒等式然后证出上述的第二个恒等式。

让我们看看 具体是一个什么样的函数。

首先:[m=1]这个函数是积性的。所以μ(d)这个函数必然也是积性的。利用我们一开始证明的那个结论。

 也就是说要求μ(m).我们只要计算μ(p^k). 根据算术基本定理理所当然的。且p代表素数。

根据其性质:

m = p^k.

那么有 μ(1)+ μ(p^1) + μ(p^2) + μ(p^3)+…μ(p^k) = [p^k=1].

假如p = 1.(其实1不是素数,我们这样的假设是不成立的,这里只是为了运算出μ(1))

那么。 μ(1)= 1.

假如p != 1.

那么 μ(1)+ μ(p^1) + μ(p^2) + μ(p^3)+…μ(p^k) = 0.

当k=1.

μ(1)+ μ(p^1) = 0 

可知μ(p^1)=μ(p)= -1.

当k=2.

 μ(1)+ μ(p^1) + μ(p^2) = 0 .

 即μ(p^2)  = 0

同理。

μ(p^(3~k)) = 0

也就是说。

μ(1) = 1 , μ(p) = -1  , μ(p^k)  = 0  (k>=2)

推广到 m:(m为任意实数)

下面0的情况。是存在p^2整除m.也就是m存在p^2因子的时候。

注意:μ(1) = 1

https://www.cnblogs.com/Milkor/p/4464515.html

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int vis[maxn];
int Mu[maxn];
int prime[maxn];
void get_Mu(int n){
    int cnt=0;
    Mu[1]=1;
    for(int i=2;i<=n;i++){
        if(!vis[i]){
            prime[++cnt]=i;Mu[i]=-1;
        }
        for(int j=1;j<=cnt && prime[j]*i<=n;j++){
            vis[prime[j]*i]=1;
            if(i%prime[j]==0)
                break;
            else
                Mu[i*prime[j]]=-Mu[i];
        }
    }
}
int main(){
    int x;
    cin>>x;
    get_Mu(x);
    system("pause");
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注