def lcim(numbers): """Returns the least common integral multiple of a list of numbers. The numbers can be rational or irrational or a mixture of both. `None` is returned for incommensurable numbers. Examples ======== >>> from sympy import S, pi >>> from sympy.calculus.util import lcim >>> lcim([S(1)/2, S(3)/4, S(5)/6]) 15/2 >>> lcim([2*pi, 3*pi, pi, pi/2]) 6*pi >>> lcim([S(1), 2*pi]) """ result = None if all(num.is_irrational for num in numbers): factorized_nums = list(map(lambda num: num.factor(), numbers)) factors_num = list( map(lambda num: num.as_coeff_Mul(), factorized_nums)) term = factors_num[0][1] if all(factor == term for coeff, factor in factors_num): common_term = term coeffs = [coeff for coeff, factor in factors_num] result = lcm_list(coeffs) * common_term elif all(num.is_rational for num in numbers): result = lcm_list(numbers) else: pass return result
def lcim(numbers): """Returns the least common integral multiple of a list of numbers. The numbers can be rational or irrational or a mixture of both. `None` is returned for incommensurable numbers. Examples ======== >>> from sympy import S, pi >>> from sympy.calculus.util import lcim >>> lcim([S(1)/2, S(3)/4, S(5)/6]) 15/2 >>> lcim([2*pi, 3*pi, pi, pi/2]) 6*pi >>> lcim([S(1), 2*pi]) """ result = None if all(num.is_irrational for num in numbers): factorized_nums = list(map(lambda num: num.factor(), numbers)) factors_num = list(map(lambda num: num.as_coeff_Mul(), factorized_nums)) term = factors_num[0][1] if all(factor == term for coeff, factor in factors_num): common_term = term coeffs = [coeff for coeff, factor in factors_num] result = lcm_list(coeffs)*common_term elif all(num.is_rational for num in numbers): result = lcm_list(numbers) else: pass return result
def d_from_primes_e(primes, e): # Classic school book implementation # d = modinv(e, (r1-1)*(r2-1)*(rn-1)...) p_minus_1 = [p - 1 for p in primes] d = long(modinv(e, sympy.lcm_list(p_minus_1))) return d
test_values = { x: 6, y: 10, z: 14, } # test Lcm lhs = Lcm(x, y, z).subs(test_values) rhs = Lcm(*(v for k,v in test_values.items())) largs = list(lhs.args).sort() rargs = list(rhs.args).sort() assert largs == rargs assert \ Lcm(x, y, z).subs(test_values).evalf() == \ lcm_list(tuple(v for k,v in test_values.items())).evalf() assert \ Lcm(x, y, z).evalf(subs=test_values) == \ lcm_list(tuple(v for k,v in test_values.items())).evalf() # test Gcd lhs = Gcd(x, y, z).subs(test_values) rhs = Gcd(*(v for k,v in test_values.items())) largs = list(lhs.args).sort() rargs = list(rhs.args).sort() assert largs == rargs assert \ Gcd(x, y, z).subs(test_values).evalf() == \ gcd_list(tuple(v for k,v in test_values.items())).evalf() assert \ Gcd(x, y, z).evalf(subs=test_values) == \