'Return Factors of ``self * other``.
Examples
>>> from sympy.core.exprtools import Factors
>>> from sympy.abc import x, y, z
>>> a = Factors((x*y**2).as_powers_dict())
>>> b = Factors((x*y/z).as_powers_dict())
>>> a.mul(b)
Factors({x: 2, y: 3, z: -1})
>>> a*b
Factors({x: 2, y: 3, z: -1})'

def mul(self, other):

    if (not isinstance(other, Factors)):
        other = Factors(other)
    if any((f.is_zero for f in (self, other))):
        return Factors(S.Zero)
    factors = dict(self.factors)
    for (factor, exp) in other.factors.items():
        if (factor in factors):
            exp = (factors[factor] + exp)
            if (not exp):
                del factors[factor]
                continue
        factors[factor] = exp
    return Factors(factors)
