Skip to content

Commit

Permalink
Added Mobius Function (TheAlgorithms#1058)
Browse files Browse the repository at this point in the history
* Add files via upload

* Update mobius_function.py

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Update mobius_function.py

* Delete mobius_function.py

* Add files via upload
  • Loading branch information
QuantumNovice authored and cclauss committed Jul 21, 2019
1 parent 93fdc9f commit c964d74
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
39 changes: 39 additions & 0 deletions maths/is_square_free.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""
References: wikipedia:square free number
python/black : True
flake8 : True
"""
from typing import List


def is_square_free(factors: List[int]) -> bool:
"""
# doctest: +NORMALIZE_WHITESPACE
This functions takes a list of prime factors as input.
returns True if the factors are square free.
>>> is_square_free([1, 1, 2, 3, 4])
False
These are wrong but should return some value
it simply checks for repition in the numbers.
>>> is_square_free([1, 3, 4, 'sd', 0.0])
True
>>> is_square_free([1, 0.5, 2, 0.0])
True
>>> is_square_free([1, 2, 2, 5])
False
>>> is_square_free('asd')
True
>>> is_square_free(24)
Traceback (most recent call last):
...
TypeError: 'int' object is not iterable
"""
return len(set(factors)) == len(factors)


if __name__ == "__main__":
import doctest

doctest.testmod()
43 changes: 43 additions & 0 deletions maths/mobius_function.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""
Refrences: https://en.wikipedia.org/wiki/M%C3%B6bius_function
References: wikipedia:square free number
python/black : True
flake8 : True
"""

from maths.prime_factors import prime_factors
from maths.is_square_free import is_square_free


def mobius(n: int) -> int:
"""
Mobius function
>>> mobius(24)
0
>>> mobius(-1)
1
>>> mobius('asd')
Traceback (most recent call last):
...
TypeError: '<=' not supported between instances of 'int' and 'str'
>>> mobius(10**400)
0
>>> mobius(10**-400)
1
>>> mobius(-1424)
1
>>> mobius([1, '2', 2.0])
Traceback (most recent call last):
...
TypeError: '<=' not supported between instances of 'int' and 'list'
"""
factors = prime_factors(n)
if is_square_free(factors):
return -1 if len(factors) % 2 else 1
return 0


if __name__ == "__main__":
import doctest

doctest.testmod()

0 comments on commit c964d74

Please sign in to comment.