Exemplo n.º 1
0
 def factorial_divide(self, p, q, digits):
     if p == q or not self.integer_check(p) or not self.integer_check(q):
         return
     x = int(p)
     y = int(q)
     if x < y:
         x, y = y, x
         p, q = q, p
     if x <= self.MAX_FACTORIAL or y <= 2 or x - y == 1 or (
         (x - y) * (math.log2(x) + math.log2(y)) > self.MAX_DIGITS << 1):
         return
     result = reduce(operator.mul, range(x, y, -1))
     p_factorial = Expression.factorial(p)
     q_factorial = Expression.factorial(q)
     self.check(self.constructor(result), digits,
                Expression.divide(p_factorial, q_factorial))
     if digits != self.max_depth and self.solutions[q][0] == 1:
         self.check(
             self.constructor(result - 1), digits + 1,
             Expression.divide(
                 Expression.subtract(p_factorial, q_factorial),
                 q_factorial))
         self.check(
             self.constructor(result + 1), digits + 1,
             Expression.divide(Expression.add(p_factorial, q_factorial),
                               q_factorial))
Exemplo n.º 2
0
 def divide(self, p, q, digits):
     quotient = p / q
     if quotient < 1:
         self.check(quotient**-1, digits, Expression.divide(q, p))
         self.check(quotient, digits, Expression.divide(p, q))
     else:
         self.check(quotient, digits, Expression.divide(p, q))
         self.check(quotient**-1, digits, Expression.divide(q, p))
Exemplo n.º 3
0
 def divide(self, p, q, digits):
     if p < q:
         p, q = q, p
     if p % q == 0:
         self.check(p // q, digits, Expression.divide(p, q))