cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

A282691 a(n) = maximal number of real roots of any of the 2^(n+1) polynomials c_0 + c_1*x + c_2*x^2 + ... + c_n*x^n where the coefficients c_i are +1 or -1.

Original entry on oeis.org

0, 1, 2, 3, 2, 3, 2, 5, 4, 5, 4, 5, 4, 5, 6, 7, 6, 5, 6, 7, 6, 7, 6, 9, 6, 7, 8, 9, 8, 9, 8
Offset: 0

Views

Author

Oanh Nguyen and N. J. A. Sloane, Feb 23 2017

Keywords

Comments

The roots are counted with multiplicity.
Since (+/-)P((+/-)x) has the same number of real roots as P(x), we need consider only the cases where the x^0 and x^1 coefficients are +1. - Robert Israel, Feb 23 2017

Examples

			a(1) = 1 from 1 + x.
a(2) = 2 from 1 + x - x^2.
a(3) = 3 from 1 + x - x^2 - x^3 = (1+x)*(1-x^2).
a(5) = 3 from x^5 - x^4 + x^3 - x^2 - x + 1. - _Robert Israel_, Feb 26 2017
a(7) = 5 from x^7 + x^6 - x^5 - x^4 - x^3 - x^2 + x + 1 = (x - 1)^2*(x + 1)^3*(x^2 + 1). - _Chai Wah Wu_ and _W. Edwin Clark_, Feb 23 2017
		

Crossrefs

Programs

  • Maple
    # Maple program using Robert Israel's suggestion (above) for the computation of a(n) using Sturm's Theorem and the squarefree factorization of the 1,-1 polynomials, from W. Edwin Clark, Feb 23 2017:
    numroots:=proc(p,x)
    local s:
    sturm(sturmseq(p,x),x,-infinity,infinity):
    end proc:
    a:=proc(n)
    local m,T,L,L1,p,P,s,k,q,u;
    m:=0;
    T:=combinat:-cartprod([seq([1,-1],i=1..n-1)]):
    while not T[finished] do
      L:=T[nextvalue]();
      L1:=[1,1,op(L)];
      p:=add(L1[i]*x^(i-1),i=1..n+1);
      q:=sqrfree(p,x);
      k:=0;
      for u in q[2] do k:=k+numroots(u[1],x)*u[2]; od;
      if k > m then m:=k;  fi;
    end do:
    return m;
    end proc:
  • Mathematica
    Do[Print[Max[CountRoots[Internal`FromCoefficientList[#, x], x] & /@  Tuples[{1, -1}, n]]], {n, 1, 23}] (* Luca Petrone, Feb 23 2017 *)
  • Sage
    import itertools
    def a(n):
        if n==0: return 0
        R = ZZ['x']; ans = 0
        for c in itertools.product([-1,1], repeat=(n-1)):
            p = R([1,1]+list(c))
            num_roots = sum([f[0].number_of_real_roots()*f[1] for f in p.factor()])
            ans = max(ans, num_roots)
        return ans  # Robin Visser, Sep 02 2024

Extensions

a(7) corrected and a(15)-a(16) added by Chai Wah Wu, Feb 23 2017; a(7) also corrected by W. Edwin Clark, Feb 23 2017
a(17)-a(22) added by Luca Petrone, Feb 23 2017
a(23) added by W. Edwin Clark, Feb 24 2017
a(24)-a(30) from Robin Visser, Sep 02 2024