OFFSET
0,12
COMMENTS
The q-osc_orbitals are univariate polynomials over the integers with degree floor((n+1)/2)^2 - n mod 2. Evaluated at q=1 they give the oscillating orbitals A232500(n) for n>=2.
Combinatorial interpretation: The definition of an orbital system is given in A232500 and in the link 'Orbitals'. The major index of an orbital is the sum of the positions of steps which are immediately followed by a step with strictly smaller value. The major index of the oscillating orbitals is the restriction of the major index of all orbitals (see A274888) to this subclass.
LINKS
Peter Luschny, Orbitals
FORMULA
Let A(n,q) = q*alpha(n-2,q)/alpha(n,q) with alpha(n,q) = Sum_{j=0..n} q^j and B(n,q) = q*beta(n-1,q)/beta(n,q) with beta(n,q) = Sum_{j=0..n} q^(2*j). Then QOscOrbitals(n,q) = qSwing(n,q)*C(n,q) with C(n,q) = A(floor(n/2),q) if n mod 4 in {0, 1} else C(n,q) = B(floor(n/4),q).
EXAMPLE
Some polynomials:
[4] (q^2 + 1)*q
[5] (q^4 + q^3 + q^2 + q + 1)*(q^2 + 1)*q
[6] (q^4 + q^3 + q^2 + q + 1)*(q^2 - q + 1)*(q + 1)*q
[7] (q^6 + q^5 + q^4 + q^3 + q^2 + q + 1)*(q^4 + q^3 + q^2 + q + 1)*(q^2 - q + 1)*(q + 1)*q
[8] (q^6 + q^5 + q^4 + q^3 + q^2 + q + 1)*(q^4 + 1)*(q^2 + q + 1)*(q^2 - q + 1)*q
[9] (q^6 + q^5 + q^4 + q^3 + q^2 + q + 1)*(q^6 + q^3 + 1)*(q^4 + 1)*(q^2 + q + 1)^2*(q^2 - q + 1)*q
The triangle starts:
[n] [k=0,1,2,...] [row sum]
[0] [0] 0
[1] [0] 0
[2] [0] 0
[3] [0] 0
[4] [0, 1, 0, 1] 2
[5] [0, 1, 1, 2, 2, 2, 1, 1] 10
[6] [0, 1, 1, 1, 2, 2, 1, 1, 1] 10
[7] [0, 1, 2, 3, 5, 7, 8, 9, 9, 8, 7, 5, 3, 2, 1] 70
[8] [0, 1, 1, 2, 2, 4, 4, 5, 4, 5, 4, 4, 2, 2, 1, 1] 42
T(5,3) = 2 because A = [-1, 1, 1, -1, 0] and B = [1, 0, -1, -1, 1] are oscillating orbitals; A has downsteps at position 3 and B has downsteps at positions 1 and 2.
PROG
(Sage)
from sage.combinat.q_analogues import q_factorial
def osc_orbitals_coeffs(n):
q = var('q')
if n < 4: return [0]
a = lambda n, q: sum(q^j for j in (0..n))
b = lambda n, q: sum(q^(2*j) for j in (0..n))
A = lambda n, q: q*a(n-2, q)/a(n, q)
B = lambda n, q: q*b(n-1, q)/b(n, q)
Q = A(n//2, q) if n%4 == 0 or n%4 == 1 else B(n//4, q)
qSwing = lambda n, q: q_factorial(n, q)/q_factorial(n//2, q)^2
return ((Q*qSwing(n, q)).factor()).list()
for n in (0..10): print([n], osc_orbitals_coeffs(n))
(Sage) # uses[unit_orbitals from A274709]
# Brute force counting
def osc_orbitals_major_index(n):
if n<4: return [0]
S = [0]*(((n+1)//2)^2 - (n % 2))
for u in unit_orbitals(n):
if all(x >= 0 for x in accumulate(u)): continue
if all(x <= 0 for x in accumulate(u)): continue
L = [i+1 if u[i+1] < u[i] else 0 for i in (0..n-2)]
# i+1 because u is 0-based whereas convention assumes 1-base
S[sum(L)] += 1
return S
for n in (0..10): print(osc_orbitals_major_index(n))
CROSSREFS
KEYWORD
nonn,tabf
AUTHOR
Peter Luschny, Jul 26 2016
STATUS
approved