标签:using algorithm 一个 sample ast class scan iostream 计算
莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出。梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号。(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数)。
Input输入包括一个数n,(2 <= n <= 10^9)Output输出miu(n)。Sample Input
5
Sample Output
-1
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 7 using namespace std; 8 9 int isprime[100005]; 10 int prime[100005]; 11 12 void Eular(int n) 13 { 14 int cnt=0; 15 memset(isprime,1,sizeof(isprime)); 16 for(int i=2;i<=n;i++) 17 { 18 if(isprime[i]) 19 { 20 cnt++; 21 prime[cnt]=i; 22 } 23 for(int j=1;j<=cnt&&i*prime[j]<=n;j++) 24 { 25 isprime[i*prime[j]]=0; 26 if(i%prime[j]==0) 27 break; 28 } 29 } 30 } 31 32 int getmiu(int n) 33 { 34 if(n==1) 35 return 1; 36 int sum = 0; 37 for(int i=1; prime[i]*prime[i] <= n; i++) 38 { 39 if(n % (prime[i] * prime[i]) == 0) 40 return 0; 41 if(n % prime[i] == 0) 42 { 43 sum++; 44 n /= prime[i]; 45 } 46 } 47 if(n > 0) 48 sum++; 49 if(sum & 1) 50 { 51 return -1; 52 } 53 return 1; 54 } 55 int main() 56 { 57 int n; 58 Eular(50000); 59 while(~scanf("%d", &n)) 60 { 61 printf("%d\n", getmiu(n)); 62 } 63 64 65 return 0; 66 }
标签:using algorithm 一个 sample ast class scan iostream 计算
原文地址:http://www.cnblogs.com/xibeiw/p/7387664.html