def _eval_apply(cls, r, k): r, k = map(Basic.sympify, (r, k)) if isinstance(k, Basic.Number): if isinstance(k, Basic.Zero): return S.One elif isinstance(k, Basic.Integer): if k.is_negative: return S.Zero else: if isinstance(r, Basic.Integer) and r.is_nonnegative: r, k = int(r), int(k) if k > r: return S.Zero elif k > r / 2: k = r - k M, result = int(sqrt(r)), 1 for prime in sieve.primerange(2, r+1): if prime > r - k: result *= prime elif prime > r / 2: continue elif prime > M: if r % prime < k % prime: result *= prime else: R, K = r, k exp = a = 0 while R > 0: a = int((R % prime) < (K % prime + a)) R, K = R / prime, K / prime exp = a + exp if exp > 0: result *= prime**exp return Basic.Integer(result) else: result = r - k + 1 for i in xrange(2, k+1): result *= r-k+i result /= i return result if k.is_integer: if k.is_negative: return S.Zero else: return Basic.gamma(r+1)/(Basic.gamma(r-k+1)*Basic.gamma(k+1))
def _eval_apply(cls, n): n = Basic.sympify(n) if isinstance(n, Basic.Number): if isinstance(n, Basic.Zero): return S.One elif isinstance(n, Basic.Integer): if n.is_negative: return S.Zero else: n, result = n.p, 1 if n < 20: for i in range(2, n+1): result *= i else: N, bits = n, 0 while N != 0: if N & 1 == 1: bits += 1 N = N >> 1 result = cls._recursive(n)*2**(n-bits) return Basic.Integer(result) if n.is_integer: if n.is_negative: return S.Zero else: return Basic.gamma(n+1)
def _eval_rewrite_as_gamma(self, r, k): return Basic.gamma(r+1) / (Basic.gamma(r-k+1)*Basic.gamma(k+1))
def _eval_rewrite_as_gamma(self, x, k): return (-1)**k * Basic.gamma(-x + k) / Basic.gamma(-x)
def _eval_rewrite_as_gamma(self, x, k): return Basic.gamma(x + k) / Basic.gamma(x)
def _eval_rewrite_as_gamma(self, arg): return Basic.gamma(1 + arg)