from sympy.abc import a, b, c, x from output_util import to_latex, sign2cmp from sgntools import sq_func_sgn from solution import * class PiIntegrate(GetIntegrateFromData): # sympy 算力不够,以下由 MMA 算出 # PiIF[n_] := # Collect[ Collect[ # PowerExpand[ Expand[ # Integrate[x^n*(1 - x)^n*(a + b x + c x^2)/(x^2 + 1), # {x, 0, 1}] # ]], # Log[2]], Pi] data = { 1: { "pi_term": (a - b - c) / 4, "log2_term": (a + b - c) / 2, CONSTANT_TERM_KEY: -a + b / 2 + 7 * c / 6, }, 2: { "pi_term": -b / 2, "log2_term": a - c, CONSTANT_TERM_KEY: (-2 * a / 3 + 19 * b / 12 + 7 * c / 10), }, 3: { "pi_term": (-a - b + c) / 2, "log2_term": a - b - c, CONSTANT_TERM_KEY: 53 * a / 60 + 34 * b / 15 - 92 * c / 105, }, 4: { "pi_term": -a + c, "log2_term": 2 * b, CONSTANT_TERM_KEY: 22 * a / 7 + 233 * b / 168 - 1979 * c / 630, }, 5: { "pi_term": -a + b + c, "log2_term": 2 * (-a - b + c), CONSTANT_TERM_KEY: 11411 * a / 2520 - 4423 * b / 2520 - 41837 * c / 9240, }, 6: { "pi_term": 2 * b, "log2_term": -4 * a + 4 * c, CONSTANT_TERM_KEY: (38429 * a) / 13860 - (174169 * b) / 27720 - (35683 * c) / 12870, }, 7: { "pi_term": 2 * (a + b - c), "log2_term": 4 * (-a + b + c), CONSTANT_TERM_KEY: -((421691 * a) / 120120) - (407917 * b) / 45045 + (31627 * c) / 9009, }, 8: { "pi_term": 4 * (a - c), "log2_term": 8 * b, CONSTANT_TERM_KEY: -(188684 * a) / 15015 - (1332173 * b) / 240240 + (3849155 * c) / 306306, }, 9: { "pi_term": 4 * (a - b - c), "log2_term": 8 * (-c + a + b), CONSTANT_TERM_KEY: -((17069771 * a) / 942480) + (86025349 * b) / 12252240 + (4216233689 * c) / 232792560, }, 10: { "pi_term": -8 * b, "log2_term": 16 * (a - c), CONSTANT_TERM_KEY: -((1290876029 * a) / 116396280) + (325039733 * b) / 12932920 + (117352369 * c) / 10581480, }, 11: { "pi_term": 8 * (-a - b + c), "log2_term": 16 * (a - b - c), CONSTANT_TERM_KEY: (817240769 * a) / 58198140 + (4216233641 * b) / 116396280 - (37593075209 * c) / 2677114440, }, 12: { "pi_term": -16 * a + 16 * c, "log2_term": -32 * b, CONSTANT_TERM_KEY: (431302721 * a) / 8580495 + (9135430531 * b) / 411863760 - (5902037233 * c) / 117417300, }, } def get_integrate_args(self, n): return x**n * (1 - x) ** n * (a + b * x + c * x**2) / (1 + x**2), (x, 0, 1) class PiSolution(Solution): def __init__(self, p, q): self.p = p self.q = q if self.q == 0: raise BadInput() self.get_integrate = PiIntegrate() self.symbols = (a, b, c) self.integrate_result_classes_eq = { "pi_term": q, "log2_term": 0, CONSTANT_TERM_KEY: -p, } # check self.check_sgn = sq_func_sgn @staticmethod def get_tries_args(): return PiIntegrate.data.keys() def get_latex_ans(self): try_arg, symbol_val, sgn = self.try_times() print(f"{(try_arg, symbol_val, sgn)=}") if try_arg is None: return None p = to_latex(self.p) q = to_latex(self.q, is_coeff=True) I = self.get_integrate.get_latex(try_arg, symbol_val) return rf"{q}\pi-{p} = {I} {sign2cmp[sgn]} 0" register("π", PiSolution, top=True) if __name__ == "__main__": while True: p = int(input(">>> ")) q = int(input(" / ")) print(PiSolution(p, q).get_latex_ans())