【问题描述】
莫比乌斯函数,数论函数,由德国数学家和天文学家莫比乌斯(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>
using namespace std;
int sushu(int x);
int main()
{
int n,a;
cin>>n;
a=n; //用a来存储自变量的值
if(n==1) cout<<1; //当函数自变量取1时,函数值为1
else if(sushu(n)!=0) cout<<-1;
//当自变量取素数时,即为奇数个素数,函数值为-1
else if(sushu(n)==0) //当自变量取值不为素数时
{
int i=2,num=0; //定义标尺num记录素数个数之和,素数的可能值i
while(a>1) //当a>1时进行循环
{
if(sushu(i)!=0&&(a%sushu(i))==0)
//当i为素数且i为自变量的因数时
{
num=num+1; //计数加一
a=a/sushu(i); //a除去这个因数
}
if(a<=i&&a!=1) num=0,a=1;
//若自变量的因数全为素数,则进行循环到最后a会=1
//当a<i时表明循环到最后,若a最后不等于1,则有非素数因数,计数归零
i++; //i++进行循环
}
if(num==0) cout<<0; //当num=0时表明自变量有平方因子,函数值为0
else //num不为0时
{
if(num%2==0) cout<<1; //判断因数中素数个数,输出函数值
else cout<<-1;
}
}
}
int sushu(int x) //定义素数的判断函数
{
int num=0;
if(x>2)
{
for(int i=2;i<x;i++)
{
if(x%i==0) num++;
}
}
else if(x==2) num=0;
else num=1;
if(num==0) num=x;
else num=0;
return num;
}