def divisorGenerator(n, maximum): divisors = [1] for i in range(1, min(n+1, maximum+1)): if n % i == 0 and i not in divisors: divisors.append(i) return divisors def greatest_common_divisor(*numbers): divisors = [] numbers = list(numbers) numbers.sort() maximum = min(numbers[0], round(numbers[-1:][0] / 2)) number_of_numbers = len(numbers) for number in numbers: divisors += divisorGenerator(number, maximum) divisors.sort() divisors.reverse() for divisor in divisors: if divisors.count(divisor) == number_of_numbers: return divisor if __name__ == '__main__': # These "asserts" using only for self-checking and not necessary for auto-testing assert greatest_common_divisor(6, 4) == 2, "Simple" assert greatest_common_divisor(2, 4, 8) == 2, "Three arguments" assert greatest_common_divisor(2, 3, 5, 7, 11) == 1, "Prime numbers" assert greatest_common_divisor(3, 9, 3, 9) == 3, "Repeating arguments" assert greatest_common_divisor(1, 1) == 1, "1" assert greatest_common_divisor(4294967296, 2) == 2, "Edge2"