Facebook
From Gamboge Hog, 3 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 73
  1. def countNecklaces(n, m):
  2.     N = n*m
  3.     R = PolynomialRing(QQ, m, 't')
  4.     ts = R.gens()
  5.     f = sum(t for t in ts)
  6.     R2 = PolynomialRing(R, N, 'a')
  7.     aGens = R2.gens()
  8.     ds = divisors(N)
  9.     F = 1/N * sum(euler_phi(N/d) * aGens[N/d-1]**d for d in ds)
  10.     g = F(*[f(*[t**k for t in ts]) for k in range(1, N+1)])
  11.     #print (g)
  12.     wantMono = prod(t**n for t in ts)
  13.     return g.coefficient(wantMono)
  14.  
  15.  
  16. sol = countNecklaces(20, 3)
  17. print (sol)