test_modular.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. from sympy.ntheory.modular import crt, crt1, crt2, solve_congruence
  2. from sympy.testing.pytest import raises
  3. def test_crt():
  4. def mcrt(m, v, r, symmetric=False):
  5. assert crt(m, v, symmetric)[0] == r
  6. mm, e, s = crt1(m)
  7. assert crt2(m, v, mm, e, s, symmetric) == (r, mm)
  8. mcrt([2, 3, 5], [0, 0, 0], 0)
  9. mcrt([2, 3, 5], [1, 1, 1], 1)
  10. mcrt([2, 3, 5], [-1, -1, -1], -1, True)
  11. mcrt([2, 3, 5], [-1, -1, -1], 2*3*5 - 1, False)
  12. assert crt([656, 350], [811, 133], symmetric=True) == (-56917, 114800)
  13. def test_modular():
  14. assert solve_congruence(*list(zip([3, 4, 2], [12, 35, 17]))) == (1719, 7140)
  15. assert solve_congruence(*list(zip([3, 4, 2], [12, 6, 17]))) is None
  16. assert solve_congruence(*list(zip([3, 4, 2], [13, 7, 17]))) == (172, 1547)
  17. assert solve_congruence(*list(zip([-10, -3, -15], [13, 7, 17]))) == (172, 1547)
  18. assert solve_congruence(*list(zip([-10, -3, 1, -15], [13, 7, 7, 17]))) is None
  19. assert solve_congruence(
  20. *list(zip([-10, -5, 2, -15], [13, 7, 7, 17]))) == (835, 1547)
  21. assert solve_congruence(
  22. *list(zip([-10, -5, 2, -15], [13, 7, 14, 17]))) == (2382, 3094)
  23. assert solve_congruence(
  24. *list(zip([-10, 2, 2, -15], [13, 7, 14, 17]))) == (2382, 3094)
  25. assert solve_congruence(*list(zip((1, 1, 2), (3, 2, 4)))) is None
  26. raises(
  27. ValueError, lambda: solve_congruence(*list(zip([3, 4, 2], [12.1, 35, 17]))))