test_group_numbers.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from sympy.combinatorics.group_numbers import (is_nilpotent_number,
  2. is_abelian_number, is_cyclic_number, _holder_formula, groups_count)
  3. from sympy.ntheory.factor_ import factorint
  4. from sympy.ntheory.generate import prime
  5. from sympy.testing.pytest import raises
  6. from sympy import randprime
  7. def test_is_nilpotent_number():
  8. assert is_nilpotent_number(21) == False
  9. assert is_nilpotent_number(randprime(1, 30)**12) == True
  10. raises(ValueError, lambda: is_nilpotent_number(-5))
  11. A056867 = [1, 2, 3, 4, 5, 7, 8, 9, 11, 13, 15, 16, 17, 19,
  12. 23, 25, 27, 29, 31, 32, 33, 35, 37, 41, 43, 45,
  13. 47, 49, 51, 53, 59, 61, 64, 65, 67, 69, 71, 73,
  14. 77, 79, 81, 83, 85, 87, 89, 91, 95, 97, 99]
  15. for n in range(1, 100):
  16. assert is_nilpotent_number(n) == (n in A056867)
  17. def test_is_abelian_number():
  18. assert is_abelian_number(4) == True
  19. assert is_abelian_number(randprime(1, 2000)**2) == True
  20. assert is_abelian_number(randprime(1000, 100000)) == True
  21. assert is_abelian_number(60) == False
  22. assert is_abelian_number(24) == False
  23. raises(ValueError, lambda: is_abelian_number(-5))
  24. A051532 = [1, 2, 3, 4, 5, 7, 9, 11, 13, 15, 17, 19, 23, 25,
  25. 29, 31, 33, 35, 37, 41, 43, 45, 47, 49, 51, 53,
  26. 59, 61, 65, 67, 69, 71, 73, 77, 79, 83, 85, 87,
  27. 89, 91, 95, 97, 99]
  28. for n in range(1, 100):
  29. assert is_abelian_number(n) == (n in A051532)
  30. A003277 = [1, 2, 3, 5, 7, 11, 13, 15, 17, 19, 23, 29,
  31. 31, 33, 35, 37, 41, 43, 47, 51, 53, 59, 61,
  32. 65, 67, 69, 71, 73, 77, 79, 83, 85, 87, 89,
  33. 91, 95, 97]
  34. def test_is_cyclic_number():
  35. assert is_cyclic_number(15) == True
  36. assert is_cyclic_number(randprime(1, 2000)**2) == False
  37. assert is_cyclic_number(randprime(1000, 100000)) == True
  38. assert is_cyclic_number(4) == False
  39. raises(ValueError, lambda: is_cyclic_number(-5))
  40. for n in range(1, 100):
  41. assert is_cyclic_number(n) == (n in A003277)
  42. def test_holder_formula():
  43. # semiprime
  44. assert _holder_formula({3, 5}) == 1
  45. assert _holder_formula({5, 11}) == 2
  46. # n in A003277 is always 1
  47. for n in A003277:
  48. assert _holder_formula(set(factorint(n).keys())) == 1
  49. # otherwise
  50. assert _holder_formula({2, 3, 5, 7}) == 12
  51. def test_groups_count():
  52. A000001 = [0, 1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1,
  53. 2, 1, 14, 1, 5, 1, 5, 2, 2, 1, 15, 2, 2,
  54. 5, 4, 1, 4, 1, 51, 1, 2, 1, 14, 1, 2, 2,
  55. 14, 1, 6, 1, 4, 2, 2, 1, 52, 2, 5, 1, 5,
  56. 1, 15, 2, 13, 2, 2, 1, 13, 1, 2, 4, 267,
  57. 1, 4, 1, 5, 1, 4, 1, 50, 1, 2, 3, 4, 1,
  58. 6, 1, 52, 15, 2, 1, 15, 1, 2, 1, 12, 1,
  59. 10, 1, 4, 2]
  60. for n in range(1, len(A000001)):
  61. try:
  62. assert groups_count(n) == A000001[n]
  63. except ValueError:
  64. pass
  65. A000679 = [1, 1, 2, 5, 14, 51, 267, 2328, 56092, 10494213, 49487367289]
  66. for e in range(1, len(A000679)):
  67. assert groups_count(2**e) == A000679[e]
  68. A090091 = [1, 1, 2, 5, 15, 67, 504, 9310, 1396077, 5937876645]
  69. for e in range(1, len(A090091)):
  70. assert groups_count(3**e) == A090091[e]
  71. A090130 = [1, 1, 2, 5, 15, 77, 684, 34297]
  72. for e in range(1, len(A090130)):
  73. assert groups_count(5**e) == A090130[e]
  74. A090140 = [1, 1, 2, 5, 15, 83, 860, 113147]
  75. for e in range(1, len(A090140)):
  76. assert groups_count(7**e) == A090140[e]
  77. A232105 = [51, 67, 77, 83, 87, 97, 101, 107, 111, 125, 131,
  78. 145, 149, 155, 159, 173, 183, 193, 203, 207, 217]
  79. for i in range(len(A232105)):
  80. assert groups_count(prime(i+1)**5) == A232105[i]
  81. A232106 = [267, 504, 684, 860, 1192, 1476, 1944, 2264, 2876,
  82. 4068, 4540, 6012, 7064, 7664, 8852, 10908, 13136]
  83. for i in range(len(A232106)):
  84. assert groups_count(prime(i+1)**6) == A232106[i]
  85. A232107 = [2328, 9310, 34297, 113147, 750735, 1600573,
  86. 5546909, 9380741, 23316851, 71271069, 98488755]
  87. for i in range(len(A232107)):
  88. assert groups_count(prime(i+1)**7) == A232107[i]