import math


class Tort:
    def __init__(self, p1=None, p2=None):
        if type(p1) is int and type(p2) is int: # int, int
            szaml = p1
            nev = p2
        elif type(p1) is str and p2 is None: # str
            elemek = p1.split("/", 1)
            szaml = int(elemek[0])
            nev = int(elemek[1])
        elif p1 is None and p2 is None: # 0 param
            szaml = 0
            nev = 1
        else:
            raise TypeError("Tört: rossz konstruktorhívás")

        if szaml < 0 or nev < 1:
            raise ValueError("Számláló>=0, nevező>0 kell")

        lnko = math.gcd(szaml, nev)
        self.szaml = szaml // lnko
        self.nev = nev // lnko


    def __str__(self):
        """szaml/nev alakú sztringgé alakítja a törtet."""
        return "{}/{}".format(self.szaml, self.nev)


    def __float__(self):
        """Visszatér a tört lebegőpontos értékével."""
        return self.szaml / self.nev


    def __add__(self, rhs):
        return Tort(
            self.szaml*rhs.nev + rhs.szaml*self.nev,
            self.nev*rhs.nev
        )


    def __mul__(self, rhs):
        return Tort(
            self.szaml * rhs.szaml,
            self.nev * rhs.nev
        )

    
def main():
    x = Tort(1, 2)
    y = Tort("1/4")

    z = x+y
    print("x =", z)
    print("sqrt(x) =", math.sqrt(z))


main()
