aboutsummaryrefslogtreecommitdiff
path: root/challenge-159/eric-cheung/python/ch-2.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-159/eric-cheung/python/ch-2.py')
-rwxr-xr-xchallenge-159/eric-cheung/python/ch-2.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/challenge-159/eric-cheung/python/ch-2.py b/challenge-159/eric-cheung/python/ch-2.py
new file mode 100755
index 0000000000..4e19c591df
--- /dev/null
+++ b/challenge-159/eric-cheung/python/ch-2.py
@@ -0,0 +1,70 @@
+## Remarks
+## https://www.geeksforgeeks.org/program-mobius-function/
+
+## Python program to evaluate
+## Mobius def M(N) = 1 if N = 1
+## M(N) = 0 if any prime factor of N is contained twice
+## M(N) = (-1) ^ (no of distinct prime factors)
+
+
+import math
+
+
+## def to check if n is prime or not
+def isPrime(n) :
+
+ if (n < 2) :
+ return False
+
+ for i in range(2, n + 1) :
+ if (n % i == 0) :
+ return False
+
+ i = i * i
+
+ return True
+
+
+def mobius(n) :
+
+ p = 0
+
+ ## Handling 2 separately
+ if (n % 2 == 0) :
+
+ n = int(n / 2)
+ p = p + 1
+
+ ## If 2^2 also divides N
+ if (n % 2 == 0) :
+ return 0
+
+ ## Check for all other prime factors
+ for i in range(3, int(math.sqrt(n)) + 1) :
+
+ ## If i divides n
+ if (n % i == 0) :
+
+ n = int(n / i)
+ p = p + 1
+
+ ## If i ^ 2 also divides N
+ if (n % i == 0) :
+ return 0
+
+ i = i + 2
+
+ if(p % 2 == 0) :
+ return -1
+
+ return 1
+
+## Driver Code
+## N = 5 ## Example: 1
+## N = 10 ## Example: 2
+N = 20 ## Example: 3
+
+print ("Mobius defs M(N) at N = {} is: {}\n" . format(N, mobius(N)));
+
+
+## This code is contributed by Manish Shaw (manishshaw1)