莫比乌斯函数

【问题描述】

   莫比乌斯函数,数论函数,由德国数学家和天文学家莫比乌斯(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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值