Решение проблемы хакерранка между двумя множествами в Python: несколько подходов

Вот пример решения на Python проблемы «Хакерранг между двумя наборами»:

Метод 1: грубая сила

def is_factor(num, arr):
    for i in arr:
        if num % i != 0:
            return False
    return True
def is_factor_of(num, arr):
    for i in arr:
        if i % num != 0:
            return False
    return True
def between_two_sets(a, b):
    count = 0
    for num in range(max(a), min(b) + 1):
        if is_factor(num, a) and is_factor_of(num, b):
            count += 1
    return count
a = [2, 4]
b = [16, 32, 96]
result = between_two_sets(a, b)
print(result)

Метод 2. Использование математической библиотеки

import math
def between_two_sets(a, b):
    lcm = a[0]
    gcd = b[0]

    for num in a[1:]:
        lcm = lcm * num // math.gcd(lcm, num)

    for num in b[1:]:
        gcd = math.gcd(gcd, num)

    count = sum([1 for x in range(lcm, gcd+1, lcm) if gcd % x == 0])
    return count
a = [2, 4]
b = [16, 32, 96]
result = between_two_sets(a, b)
print(result)

Метод 3. Использование списков

def between_two_sets(a, b):
    count = sum(all(num % i == 0 for i in a) and all(j % num == 0 for j in b) for num in range(max(a), min(b) + 1))
    return count
a = [2, 4]
b = [16, 32, 96]
result = between_two_sets(a, b)
print(result)