public static Rational operator *(Rational left, Rational right)
{
// Cross-cancel to avoid unnecessary overflow;
// the result then is automatically normalized
int gcd1 = Gcd(left.Numerator, right.Denominator);
int gcd2 = Gcd(right.Numerator, left.Denominator);
var num = left.Numerator / gcd1 * (right.Numerator / gcd2);
var denominator = left.Denominator / gcd2 * (right.Denominator / gcd1);
return new Rational(num, denominator);
}