
from collections import Counter

def prime_factors(n):
    """Gibt die Primfaktoren von n als Liste zurück"""
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

def lcm(a, b):
    """Berechnet das kleinste gemeinsame Vielfache (kgV) von a und b"""
    # Zerlege die Zahlen in ihre Primfaktoren
    factors_a = prime_factors(a)
    factors_b = prime_factors(b)
    
    # Erstelle Counter-Objekte, um die Häufigkeiten der Primfaktoren zu zählen
    counter_a = Counter(factors_a)
    counter_b = Counter(factors_b)
    
    # Bestimme die Primfaktoren des kgV
    lcm_factors = counter_a | counter_b  # Vereinigung der beiden Counter (nimmt max. Häufigkeit)
    
    # Berechne das kgV aus den Primfaktoren
    lcm_value = 1
    for factor in lcm_factors:
        lcm_value *= factor ** lcm_factors[factor]
    
    return lcm_value

def add_fractions(numerator1, denominator1, numerator2, denominator2):
    # Berechne das kleinste gemeinsame Vielfache (kgV) der Nenner
    common_denominator = lcm(denominator1, denominator2)
    
    # Erweitere die Zähler der beiden Brüche
    new_numerator1 = numerator1 * (common_denominator // denominator1)
    new_numerator2 = numerator2 * (common_denominator // denominator2)
    
    # Addiere die erweiterten Zähler
    new_numerator = new_numerator1 + new_numerator2
    
    return new_numerator, common_denominator

def format_fraction(numerator, denominator):
    if numerator < denominator:
        return f"{numerator}/{denominator}"
    else:
        whole_number = numerator // denominator
        remainder = numerator % denominator
        if remainder == 0:
            return f"{whole_number}"
        else:
            return f"{whole_number} {remainder}/{denominator}"

# Hauptprogramm
def main():
    # Frage die beiden Brüche ab
    numerator1 = int(input("Gib den Zähler des ersten Bruchs ein: "))
    denominator1 = int(input("Gib den Nenner des ersten Bruchs ein: "))
    numerator2 = int(input("Gib den Zähler des zweiten Bruchs ein: "))
    denominator2 = int(input("Gib den Nenner des zweiten Bruchs ein: "))

    try:
        result_numerator, result_denominator = add_fractions(numerator1, denominator1, numerator2, denominator2)
        result = format_fraction(result_numerator, result_denominator)
        print(f"Das Ergebnis der Addition ist: {result}")
    except ValueError as e:
        print(e)

if __name__ == "__main__":
    main()
