Message410460
def comb64(n, k):
'comb(n, k) in multiplicative group modulo 64-bits'
return (F[n] * Finv[k] * Finv[n-k] & (2**64-1)) << (S[n] - S[k] - S[n - k])
def comb_iterative(n, k):
'Straight multiply and divide when k is small.'
result = 1
for r in range(1, k+1):
result *= n - r + 1
result //= r
return result
def C(n, k):
k = min(k, n - k)
if k == 0: return 1
if k == 1: return n
if k < len(k2n) and n <= k2n[k]: return comb64(n, k) # 64-bit fast case
if k == FixedJ and n <= Jlim: return KnownComb[n] # Precomputed diagonal
if k < 10: return comb_iterative(n, k) # Non-recursive for small k
j = FixedJ if k > FixedJ and n <= Jlim else k // 2
return C(n, j) * C(n-j, k-j) // C(k, j) # Recursive case |
|
Date |
User |
Action |
Args |
2022-01-13 03:42:10 | rhettinger | set | recipients:
+ rhettinger, tim.peters, mark.dickinson, serhiy.storchaka, PedanticHacker, mcognetta, Stefan Pochmann |
2022-01-13 03:42:10 | rhettinger | set | messageid: <1642045330.14.0.612366836289.issue37295@roundup.psfhosted.org> |
2022-01-13 03:42:10 | rhettinger | link | issue37295 messages |
2022-01-13 03:42:10 | rhettinger | create | |
|