1
1
from symengine .utilities import raises
2
2
3
- from symengine .lib .symengine_wrapper import (probab_prime_p , nextprime , gcd ,
3
+ from symengine .lib .symengine_wrapper import (isprime , nextprime , gcd ,
4
4
lcm , gcd_ext , mod , quotient , quotient_mod , mod_inverse , crt , fibonacci ,
5
5
fibonacci2 , lucas , lucas2 , binomial , factorial , divides , factor ,
6
6
factor_lehman_method , factor_pollard_pm1_method , factor_pollard_rho_method ,
7
7
prime_factors , prime_factor_multiplicities , Sieve , Sieve_iterator ,
8
8
bernoulli , primitive_root , primitive_root_list , totient , carmichael ,
9
9
multiplicative_order , legendre , jacobi , kronecker , nthroot_mod ,
10
- nthroot_mod_list , powermod , powermod_list , Integer )
10
+ nthroot_mod_list , powermod , powermod_list , Integer , sqrt_mod )
11
11
12
12
13
13
def test_probab_prime_p ():
14
- assert probab_prime_p (101 ) is True
15
- assert probab_prime_p (100 ) is False
14
+ s = set (Sieve .generate_primes (1000 ))
15
+ for n in range (1001 ):
16
+ assert (n in s ) == isprime (n )
16
17
17
18
18
19
def test_nextprime ():
@@ -32,10 +33,13 @@ def test_lcm():
32
33
33
34
34
35
def test_gcd_ext ():
35
- [ p , q , r ] = gcd_ext (6 , 9 )
36
+ ( q , r , p ) = gcd_ext (6 , 9 )
36
37
assert p == q * 6 + r * 9
37
- [ p , q , r ] = gcd_ext (- 15 , 10 )
38
+ ( q , r , p ) = gcd_ext (- 15 , 10 )
38
39
assert p == q * - 15 + r * 10
40
+ assert gcd_ext (2 , 3 ) == (- 1 , 1 , 1 )
41
+ assert gcd_ext (10 , 12 ) == (- 1 , 1 , 2 )
42
+ assert gcd_ext (100 , 2004 ) == (- 20 , 1 , 4 )
39
43
40
44
41
45
def test_mod ():
@@ -212,6 +216,22 @@ def test_nthroot_mod():
212
216
assert nthroot_mod (3 , 2 , 5 ) is None
213
217
214
218
219
+ def test_sqrt_mod ():
220
+ assert sqrt_mod (3 , 13 ) == 9
221
+ assert sqrt_mod (6 , 23 ) == 12
222
+ assert sqrt_mod (345 , 690 ) == 345
223
+ assert sqrt_mod (9 , 27 , True ) == [3 , 6 , 12 , 15 , 21 , 24 ]
224
+ assert sqrt_mod (9 , 81 , True ) == [3 , 24 , 30 , 51 , 57 , 78 ]
225
+ assert sqrt_mod (9 , 3 ** 5 , True ) == [3 , 78 , 84 , 159 , 165 , 240 ]
226
+ assert sqrt_mod (81 , 3 ** 4 , True ) == [0 , 9 , 18 , 27 , 36 , 45 , 54 , 63 , 72 ]
227
+ assert sqrt_mod (81 , 3 ** 5 , True ) == [9 , 18 , 36 , 45 , 63 , 72 , 90 , 99 , 117 ,\
228
+ 126 , 144 , 153 , 171 , 180 , 198 , 207 , 225 , 234 ]
229
+ assert sqrt_mod (81 , 3 ** 6 , True ) == [9 , 72 , 90 , 153 , 171 , 234 , 252 , 315 ,\
230
+ 333 , 396 , 414 , 477 , 495 , 558 , 576 , 639 , 657 , 720 ]
231
+ assert sqrt_mod (81 , 3 ** 7 , True ) == [9 , 234 , 252 , 477 , 495 , 720 , 738 , 963 ,\
232
+ 981 , 1206 , 1224 , 1449 , 1467 , 1692 , 1710 , 1935 , 1953 , 2178 ]
233
+
234
+
215
235
def test_nthroot_mod_list ():
216
236
assert nthroot_mod_list (- 4 , 4 , 65 ) == [4 , 6 , 7 , 9 , 17 , 19 , 22 , 32 ,
217
237
33 , 43 , 46 , 48 , 56 , 58 , 59 , 61 ]
0 commit comments