题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1240
题目让求莫比乌斯函数。函数记为miu(n)
n = 1 miu(n) = 1
n有平方因子 min(n) = 0
n是k个不同素数的乘积 min(n) = (-1)^k
AC代码:
#include <iostream>
#include <stdio.h>
#include <queue>
#include <math.h>
#include <string.h>
#include <algorithm>
using namespace std;
int miu(int n)
{
if(n == 1)
return 1;
int k = 0;
for(int i = 2; i <= (int)sqrt(n); i++)
{
int num = 0;
if(n%i == 0)
{
k++;
n = n/i;
num++;
}
while(n%i == 0)
{
num++;
if(num>=2) ///i被乘了两次
return 0;
n = n/i;
}
}
if(n != 1) ///最后这个n是因子
k++;
if(k&1)
return -1;
else
return 1;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
printf("%d\n",miu(n));
}
return 0;
}