<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">class Fraccion:
    """Definicion de la clase fraccion"""

    Pr = []  # inicializa el arreglo que contendra los primos encontrados
    nPr = 1000

    def __init__(self, p=0, q=1):
        """Constructor fraccion p/q"""
        self.P = p
        self.Q = q
        self.cribaEratostenes()

    def __str__(self):
        """Visualiza la Fraccion"""
        self.simplifica()
        return str(self.P) + "/" + str(self.Q)

    def visualiza(self):
        """Visualiza la Fraccion"""
        self.simplifica()
        print("{} / {}".format(self.P, self.Q))

    def __add__(self, a):
        """Suma"""
        p = self.P * a.Q + a.P * self.Q
        q = self.Q * a.Q
        return Fraccion(p, q)

    def __sub__(self, a):
        """Resta"""
        p = self.P * a.Q - a.P * self.Q
        q = self.Q * a.Q
        return Fraccion(p, q)

    def __mul__(self, a):
        """Multiplicacion"""
        p = self.P * a.P
        q = self.Q * a.Q
        return Fraccion(p, q)

    def __truediv__(self, a):
        """Division"""
        p = self.P * a.Q
        q = self.Q * a.P
        return Fraccion(p, q)

    def __ne__(self, a):
        """No igual"""
        if self.P == a.P and self.Q == a.Q:
            return False
        return True

    def __eq__(self, a):
        """igual"""
        if self.P == a.P and self.Q == a.Q:
            return True
        return False

    def cribaEratostenes(self):
        """Calcular los primeros N numeros primos
        por el algoritmo de la criba de Eratostenes
        """
        # Guarda los primeros 2 primos
        self.Pr.append(2)
        self.Pr.append(3)
        npr = 2
        # Empieza la busqueda de primos a partir del numero 4
        n = 4
        # Ciclo para buscar los primeros N primos
        while npr &lt; self.nPr:
            for i in range(npr):
                if (n % self.Pr[i]) == 0:
                    break
            if i == npr - 1:
                self.Pr.append(n)
                npr += 1
            n += 1

    def visualizaPrimos(self):
        """Visualiza los primos encontrados"""
        print("Visualiza los primeros " + str(self.nPr) + " primos ")
        for i in range(self.nPr):
            print(self.Pr[i])

    def simplifica(self):
        """Simplifica la fraccion"""
        if self.P == 0:
            self.Q = 1
            return
        for i in range(self.nPr):
            sw = 1
            while sw == 1:
                sw = 0
                if abs(self.P) &lt; 2 or self.Q &lt; 2:
                    break
                if self.P % self.Pr[i] == 0 and self.Q % self.Pr[i] == 0:
                    self.P //= self.Pr[i]
                    self.Q //= self.Pr[i]
                    sw = 1


"""
Prueba de las clases
"""
if __name__ == "__main__":
    a = Fraccion(1, 3)
    b = Fraccion(2, 3)
    c = Fraccion()

    a.visualiza()
    b.visualiza()
    c.visualiza()

    print("Suma de dos operandos")
    c = a + b
    r = str(a) + " + " + str(b) + " = " + str(c)
    print(r)

    print("Resta de dos operandos")
    c = a - b
    r = str(a) + " - " + str(b) + " = " + str(c)
    print(r)

    print("Multiplicacion de dos operandos")
    c = a + b
    r = str(a) + " + " + str(b) + " = " + str(c)
    print(r)

    print("Division de dos operandos")
    c = a - b
    r = str(a) + " - " + str(b) + " = " + str(c)
    print(r)
</pre></body></html>