@@ -3648,7 +3648,7 @@ def CRT_basis(moduli, *, require_coprime_moduli=True):
3648
3648
extended Euclidean algorithm
3649
3649
3650
3650
- ``require_coprime_moduli`` -- boolean (default: ``True``); whether the moduli
3651
- must be coprime.
3651
+ must be pairwise coprime.
3652
3652
3653
3653
OUTPUT:
3654
3654
@@ -3698,13 +3698,13 @@ def CRT_basis(moduli, *, require_coprime_moduli=True):
3698
3698
return [cs , True ]
3699
3699
except ValueError :
3700
3700
if require_coprime_moduli :
3701
- raise ValueError ( 'moduli must be coprime' )
3701
+ raise
3702
3702
e = [1 ]
3703
3703
M_i = moduli [0 ]
3704
3704
for i in range (1 , n ):
3705
3705
m_i = moduli [i ]
3706
3706
d_i = gcd (M_i , m_i )
3707
- e_i = CRT (0 , 1 , M_i / d_i , m_i / d_i )
3707
+ e_i = CRT (0 , 1 , M_i // d_i , m_i / / d_i )
3708
3708
e .append (e_i )
3709
3709
M_i = M_i .lcm (m_i )
3710
3710
partial_prod_table = [1 ]
@@ -3757,12 +3757,12 @@ def CRT_vectors(X, moduli):
3757
3757
raise ValueError ("number of moduli must equal length of X" )
3758
3758
res = CRT_basis (moduli , require_coprime_moduli = False )
3759
3759
a = res [0 ]
3760
- modulus = prod (moduli )
3760
+ modulus = lcm (moduli )
3761
3761
candidate = [sum (a [i ] * X [i ][j ] for i in range (n )) % modulus
3762
3762
for j in range (len (X [0 ]))]
3763
3763
if not res [1 ] and any (X [i ][j ] != candidate [j ] % moduli [i ] for i in range (n )
3764
- for j in range (len (X [i ]))):
3765
- raise ValueError ("solution does not exist" )
3764
+ for j in range (len (X [i ]))):
3765
+ raise ValueError ("solution does not exist" )
3766
3766
return candidate
3767
3767
3768
3768
def binomial (x , m , ** kwds ):
0 commit comments