Update basic_maths.py (#1517)

* Update basic_maths.py

Add Doctests.

* Update basic_maths.py

* Add a space to fix the doctest
This commit is contained in:
percy07 2019-10-30 02:24:31 +05:30 committed by Christian Clauss
parent 4880e5479a
commit f8e97aa597
2 changed files with 26 additions and 28 deletions

View File

@ -2,55 +2,56 @@
import math import math
def prime_factors(n): def prime_factors(n: int) -> list:
"""Find Prime Factors.""" """Find Prime Factors.
>>> prime_factors(100)
[2, 2, 5, 5]
"""
pf = [] pf = []
while n % 2 == 0: while n % 2 == 0:
pf.append(2) pf.append(2)
n = int(n / 2) n = int(n / 2)
for i in range(3, int(math.sqrt(n)) + 1, 2): for i in range(3, int(math.sqrt(n)) + 1, 2):
while n % i == 0: while n % i == 0:
pf.append(i) pf.append(i)
n = int(n / i) n = int(n / i)
if n > 2: if n > 2:
pf.append(n) pf.append(n)
return pf return pf
def number_of_divisors(n): def number_of_divisors(n: int) -> int:
"""Calculate Number of Divisors of an Integer.""" """Calculate Number of Divisors of an Integer.
>>> number_of_divisors(100)
9
"""
div = 1 div = 1
temp = 1 temp = 1
while n % 2 == 0: while n % 2 == 0:
temp += 1 temp += 1
n = int(n / 2) n = int(n / 2)
div = div * (temp) div *= temp
for i in range(3, int(math.sqrt(n)) + 1, 2): for i in range(3, int(math.sqrt(n)) + 1, 2):
temp = 1 temp = 1
while n % i == 0: while n % i == 0:
temp += 1 temp += 1
n = int(n / i) n = int(n / i)
div = div * (temp) div *= temp
return div return div
def sum_of_divisors(n): def sum_of_divisors(n: int) -> int:
"""Calculate Sum of Divisors.""" """Calculate Sum of Divisors.
>>> sum_of_divisors(100)
217
"""
s = 1 s = 1
temp = 1 temp = 1
while n % 2 == 0: while n % 2 == 0:
temp += 1 temp += 1
n = int(n / 2) n = int(n / 2)
if temp > 1: if temp > 1:
s *= (2 ** temp - 1) / (2 - 1) s *= (2 ** temp - 1) / (2 - 1)
for i in range(3, int(math.sqrt(n)) + 1, 2): for i in range(3, int(math.sqrt(n)) + 1, 2):
temp = 1 temp = 1
while n % i == 0: while n % i == 0:
@ -58,27 +59,24 @@ def sum_of_divisors(n):
n = int(n / i) n = int(n / i)
if temp > 1: if temp > 1:
s *= (i ** temp - 1) / (i - 1) s *= (i ** temp - 1) / (i - 1)
return int(s)
return s
def euler_phi(n): def euler_phi(n: int) -> int:
"""Calculte Euler's Phi Function.""" """Calculte Euler's Phi Function.
>>> euler_phi(100)
40
"""
l = prime_factors(n) l = prime_factors(n)
l = set(l) l = set(l)
s = n s = n
for x in l: for x in l:
s *= (x - 1) / x s *= (x - 1) / x
return s return int(s)
def main(): if __name__ == "__main__":
"""Print the Results of Basic Math Operations."""
print(prime_factors(100)) print(prime_factors(100))
print(number_of_divisors(100)) print(number_of_divisors(100))
print(sum_of_divisors(100)) print(sum_of_divisors(100))
print(euler_phi(100)) print(euler_phi(100))
if __name__ == "__main__":
main()

View File

@ -90,7 +90,7 @@ class Perceptron:
>>> data = [[2.0149, 0.6192, 10.9263]] >>> data = [[2.0149, 0.6192, 10.9263]]
>>> targets = [-1] >>> targets = [-1]
>>> perceptron = Perceptron(data,targets) >>> perceptron = Perceptron(data,targets)
>>> perceptron.training() # doctest:+ELLIPSIS >>> perceptron.training() # doctest: +ELLIPSIS
('\\nEpoch:\\n', ...) ('\\nEpoch:\\n', ...)
... ...
>>> perceptron.sort([-0.6508, 0.1097, 4.0009]) # doctest: +ELLIPSIS >>> perceptron.sort([-0.6508, 0.1097, 4.0009]) # doctest: +ELLIPSIS