mirror of
https://github.com/TheAlgorithms/Python.git
synced 2026-03-13 09:50:19 +08:00
Removed redundant greatest_common_divisor code (#9358)
* Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder * Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder, also fixed comments * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Deleted greatest_common_divisor def from many files and instead imported the method from Maths folder, also fixed comments * Imports organized * recursive gcd function implementation rolledback * more gcd duplicates removed * more gcd duplicates removed * Update maths/carmichael_number.py * updated files * moved a file to another location --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>
This commit is contained in:
@@ -10,14 +10,7 @@ satisfies the following modular arithmetic condition:
|
||||
Examples of Carmichael Numbers: 561, 1105, ...
|
||||
https://en.wikipedia.org/wiki/Carmichael_number
|
||||
"""
|
||||
|
||||
|
||||
def gcd(a: int, b: int) -> int:
|
||||
if a < b:
|
||||
return gcd(b, a)
|
||||
if a % b == 0:
|
||||
return b
|
||||
return gcd(b, a % b)
|
||||
from maths.greatest_common_divisor import greatest_common_divisor
|
||||
|
||||
|
||||
def power(x: int, y: int, mod: int) -> int:
|
||||
@@ -33,7 +26,7 @@ def power(x: int, y: int, mod: int) -> int:
|
||||
def is_carmichael_number(n: int) -> bool:
|
||||
b = 2
|
||||
while b < n:
|
||||
if gcd(b, n) == 1 and power(b, n - 1, n) != 1:
|
||||
if greatest_common_divisor(b, n) == 1 and power(b, n - 1, n) != 1:
|
||||
return False
|
||||
b += 1
|
||||
return True
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import unittest
|
||||
from timeit import timeit
|
||||
|
||||
from maths.greatest_common_divisor import greatest_common_divisor
|
||||
|
||||
|
||||
def least_common_multiple_slow(first_num: int, second_num: int) -> int:
|
||||
"""
|
||||
@@ -20,26 +22,6 @@ def least_common_multiple_slow(first_num: int, second_num: int) -> int:
|
||||
return common_mult
|
||||
|
||||
|
||||
def greatest_common_divisor(a: int, b: int) -> int:
|
||||
"""
|
||||
Calculate Greatest Common Divisor (GCD).
|
||||
see greatest_common_divisor.py
|
||||
>>> greatest_common_divisor(24, 40)
|
||||
8
|
||||
>>> greatest_common_divisor(1, 1)
|
||||
1
|
||||
>>> greatest_common_divisor(1, 800)
|
||||
1
|
||||
>>> greatest_common_divisor(11, 37)
|
||||
1
|
||||
>>> greatest_common_divisor(3, 5)
|
||||
1
|
||||
>>> greatest_common_divisor(16, 4)
|
||||
4
|
||||
"""
|
||||
return b if a == 0 else greatest_common_divisor(b % a, a)
|
||||
|
||||
|
||||
def least_common_multiple_fast(first_num: int, second_num: int) -> int:
|
||||
"""
|
||||
Find the least common multiple of two numbers.
|
||||
|
||||
@@ -21,7 +21,6 @@ get_primes_between(pNumber1, pNumber2)
|
||||
|
||||
is_even(number)
|
||||
is_odd(number)
|
||||
gcd(number1, number2) // greatest common divisor
|
||||
kg_v(number1, number2) // least common multiple
|
||||
get_divisors(number) // all divisors of 'number' inclusive 1, number
|
||||
is_perfect_number(number)
|
||||
@@ -40,6 +39,8 @@ goldbach(number) // Goldbach's assumption
|
||||
|
||||
from math import sqrt
|
||||
|
||||
from maths.greatest_common_divisor import gcd_by_iterative
|
||||
|
||||
|
||||
def is_prime(number: int) -> bool:
|
||||
"""
|
||||
@@ -317,39 +318,6 @@ def goldbach(number):
|
||||
# ----------------------------------------------
|
||||
|
||||
|
||||
def gcd(number1, number2):
|
||||
"""
|
||||
Greatest common divisor
|
||||
input: two positive integer 'number1' and 'number2'
|
||||
returns the greatest common divisor of 'number1' and 'number2'
|
||||
"""
|
||||
|
||||
# precondition
|
||||
assert (
|
||||
isinstance(number1, int)
|
||||
and isinstance(number2, int)
|
||||
and (number1 >= 0)
|
||||
and (number2 >= 0)
|
||||
), "'number1' and 'number2' must been positive integer."
|
||||
|
||||
rest = 0
|
||||
|
||||
while number2 != 0:
|
||||
rest = number1 % number2
|
||||
number1 = number2
|
||||
number2 = rest
|
||||
|
||||
# precondition
|
||||
assert isinstance(number1, int) and (
|
||||
number1 >= 0
|
||||
), "'number' must been from type int and positive"
|
||||
|
||||
return number1
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
|
||||
|
||||
def kg_v(number1, number2):
|
||||
"""
|
||||
Least common multiple
|
||||
@@ -567,14 +535,14 @@ def simplify_fraction(numerator, denominator):
|
||||
), "The arguments must been from type int and 'denominator' != 0"
|
||||
|
||||
# build the greatest common divisor of numerator and denominator.
|
||||
gcd_of_fraction = gcd(abs(numerator), abs(denominator))
|
||||
gcd_of_fraction = gcd_by_iterative(abs(numerator), abs(denominator))
|
||||
|
||||
# precondition
|
||||
assert (
|
||||
isinstance(gcd_of_fraction, int)
|
||||
and (numerator % gcd_of_fraction == 0)
|
||||
and (denominator % gcd_of_fraction == 0)
|
||||
), "Error in function gcd(...,...)"
|
||||
), "Error in function gcd_by_iterative(...,...)"
|
||||
|
||||
return (numerator // gcd_of_fraction, denominator // gcd_of_fraction)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user