莫比乌斯函数

左心房为你撑大大i 提交于 2020-01-28 00:49:19

【问题描述】
莫比乌斯函数,数论函数,由德国数学家和天文学家莫比乌斯(Möbius ,1790–1868)提出。梅滕斯(Mertens)首先使用μ(n)作为莫比乌斯函数的记号。而据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数。莫比乌斯函数在数论中有着广泛应用。
莫比乌斯函数完整定义的通俗表达:
1)莫比乌斯函数μ(n)的定义域是N
2)μ(1)=1
3)当n存在平方因子时,μ(n)=0
4)当n是素数或奇数个不同素数之积时,μ(n)=-1
5)当n是偶数个不同素数之积时,μ(n)=1
例如:
μ(8),μ(12),μ(18) = 0
μ(2),μ(3),μ(30) = -1
μ(1),μ(6),μ(10) = 1
给出一个数n, 计算μ(n)。
在这里插入图片描述
【输入形式】
输入一行一个整数n
【输出形式】
输出μ(n)
【样例输入】
12
【样例输出】
0

【示例代码】

#include<iostream>
#include<cmath>
using namespace std;
int pfyz(int);
int prime(int);
int main()
{
    int n,m=0,i=2,j,a,b,s,f=0,t=0;
    cin>>n;
    s=n;
    if(pfyz(n)==1) m=0;
    else if(n==1) m=1;
    else if(prime(n)==1) m=-1;
    else if(pfyz(n)==0)    //判断n是否为奇或偶数个不同素数之积
    {for(i=2;i<=s;i++)
     {
        for(j=2;j<=s;j++)
        {if(prime(j)==1)
         {
            a=j;
            b=s/a;
            if(s%b==0)
            {
                f++;
                if(b!=a&&prime(b)==1) {f++;t=1;break;}
                else if(prime(b)==0) {s=b;break;}
            }
         }
        }
        if(t==1) break;
      }
       if((t==1)&&(f%2==0)) m=1;
       else if((t==1)&&(f%2==1)) m=-1;
       else m=0;

     }

    cout<<m<<endl;
    return 0;
 }
int pfyz(int n)
{
    double j,i;
    int p=n+1,y;
    for(i=2;i<=n;i++)   //判断n是否存在平方因子
    {
        for(j=2;j<=i;j++)
        {
            if(i==pow(j,2)) {p=i;break;}
        }
        if(n%p==0) {y=1;break;}
        else y=0;
    }
    return y;
}
int prime(int x)
{
    int i,y;
    if(x==1) y=0;
    else if(x==2) y=1;
    else for(i=2;i<x;i++)
    {
    if(x%i==0)
    {
      y=0;break;
    }
    else
      y=1;
    }
    return y;
}

若有错误,还望指出!若有别的方法,欢迎交流!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!