|
对 \(m=3\), \(k_1,k_2,k_3 = 1, \ldots, 6 \), \( p = 7 \) 验证了这个“推广”,未发现反例。如何证明呢
- from itertools import zip_longest
- def binomial_mod(n, k, p):
- if k > n:
- return 0
- num = denom = 1
- for i in range(k):
- num = (num * (n - i)) % p
- denom = (denom * (i + 1)) % p
- return (num * pow(denom, p-2, p)) % p
- def trinomial_mod(k1, k2, k3, p):
- return (binomial_mod(k1+k2+k3,k1,p)*binomial_mod(k2+k3,k2,p)) % p
- def lucas_theorem_trinomial(k1, k2, k3, p):
- def digits_in_base(n, base):
- digits = []
- while n:
- digits.append(n % base)
- n //= base
- return digits
- k1_digits = digits_in_base(k1, p)
- k2_digits = digits_in_base(k2, p)
- k3_digits = digits_in_base(k3, p)
-
- result = 1
- for k1i, k2i, k3i in zip_longest(k1_digits, k2_digits, k3_digits, fillvalue=0):
- result = (result * trinomial_mod(k1i, k2i, k3i, p)) % p
- return result
- p = 7
- for k1 in range(1, 7):
- for k2 in range(1, 7):
- for k3 in range(1, 7):
- lhs = trinomial_mod(k1, k2, k3, p)
- rhs = lucas_theorem_trinomial(k1, k2, k3, p)
- print(f"k1={k1}, k2={k2}, k3={k3}, trinomial(k1, k2, k3) % p = {lhs}, Lucas' theorem = {rhs}, Verified: {lhs == rhs}")
复制代码 |
|