Advertisement
jootiee

Untitled

Jun 16th, 2022
1,007
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.31 KB | None | 0 0
  1. def bin_pow(n, k, d):
  2.     if k == 0:
  3.         return 1
  4.     if k % 2 == 0:
  5.         return bin_pow(n, k // 2, d) ** 2 % d
  6.     return (bin_pow(n, (k - 1) // 2, d) ** 2 % d * n % d) % d
  7.  
  8.  
  9. def get_primary_products(n):
  10.     array = [0] + [1 for _ in range(n)]
  11.     primaries = eratosthenes(n)
  12.     for prime_number in primaries:
  13.         prime_number_index = prime_number
  14.         i = 0
  15.         while True:
  16.             i += 1
  17.             prime_number = bin_pow(prime_number_index, i, 10**6)
  18.             if prime_number <= n:
  19.                 array[prime_number] -= 1
  20.             else:
  21.                 array[prime_number_index] = i - 1
  22.                 break
  23.     return array
  24.  
  25.  
  26. def eratosthenes(n):
  27.     array = list(range(n + 1))
  28.     array[1] = 0
  29.     for i in array:
  30.         if i > 1:
  31.             for j in range(2*i, len(array), i):
  32.                 array[j] = 0
  33.     return list(filter(lambda x: x, array))
  34.  
  35.  
  36. def get_binomial_coef(n, k):
  37.     numerator_products = get_primary_products(n)
  38.     denumerator_products = get_primary_products(n - k if n - k > k else k)
  39.     for i, elem in enumerate(get_primary_products(k if n - k > k else n - k)):
  40.         denumerator_products[i] += elem
  41.     for i in range(len(denumerator_products)):
  42.         numerator_products[i] -= denumerator_products[i]
  43.     return numerator_products
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement