login

Year-end appeal: Please make a donation to the OEIS Foundation to support ongoing development and maintenance of the OEIS. We are now in our 61st year, we have over 378,000 sequences, and we’ve reached 11,000 citations (which often say “discovered thanks to the OEIS”).

A362344
Maximum number of distinct real roots of degree-n polynomial with coefficients 0,1.
3
1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6
OFFSET
1,2
LINKS
Enrico Bertolazzi, Sturm.
P. Borwein, T. Erdélyi, and G. Kós, Littlewood-type problems on [0,1], Proc. London Math. Soc. 79 (1999), 22-46.
D. Ivanov et al., Number of real roots of 0,1 polynomial, MathOverflow.
A. Odlyzko and B. Poonen, Zeros of polynomials with 0,1 coefficients, L’Enseignement Mathématique 39 (1993), 317-348.
EXAMPLE
For n = 7, the maximum number of distinct real roots of a degree-7 polynomial with coefficients 0,1 is 3; e.g., the polynomial x^7 + x^4 + x^2 + x has 3 distinct real roots.
MAPLE
f:= proc(n) local i, j, L, p, v, m;
m:= 0:
for i from 2^n to 2^(n+1)-1 do
L:= convert(i, base, 2);
p:= add(L[j]*x^(j-1), j=1..n+1);
v:= sturm(sturmseq(p, x), x, -infinity, infinity);
if v > m then m:= v fi;
od;
m
end proc:
map(f, [$1..19]); # Robert Israel, May 07 2023
MATHEMATICA
For[n=1, n<=8, n++, Print[Max[Length@DeleteDuplicates@NSolve[Total[x^#]+x^n==0, x, Reals]&/@Subsets[Range[0, n-1]]]]]
PROG
(MATLAB)
% uses the Sturm toolbox; see links
for i=2:13
display([i-1 maxroots(i)]);
end
function max_len=maxroots(n)
max_len = 0;
combinations = dec2bin(1:2:2^n-1) - '0';
for i = 1:2^(n-1)
c = combinations(i, :);
if sum(c, 2) == 1
continue;
end
len = distinct_real_roots(c);
if len > max_len
max_len = len;
end
end
end
function sign_var=distinct_real_roots(a)
S=Sturm();
S.build(Poly(a));
sign_var=0;
last_sign=0;
last_sign_parity=0;
parity=1;
for i=1:length(S.m_sturm)
v=S.m_sturm{i}.m_coeffs(end);
if v>0
if last_sign<0
sign_var = sign_var - 1;
end
if last_sign_parity == -parity
sign_var = sign_var + 1;
end
last_sign = 1;
last_sign_parity = parity;
elseif v<0
if last_sign>0
sign_var = sign_var - 1;
end
if last_sign_parity == parity
sign_var = sign_var + 1;
end
last_sign = -1;
last_sign_parity = -parity;
end
parity = -parity;
end
end
(Python)
from itertools import product
from sympy.abc import x
from sympy import sturm, oo, sign, nan, LT
def A362344(n):
c = 0
for s in product([0, 1], repeat=n):
q = sturm(x**n+sum(int(s[i])*x**i for i in range(n)))
a = [1 if (k:=LT(p).subs(x, -oo))==nan else sign(k) for p in q[:-1]]+[sign(q[-1])]
b = [1 if (k:=LT(p).subs(x, oo))==nan else sign(k) for p in q[:-1]]+[sign(q[-1])]
c = max(c, sum(1 for i in range(len(a)-1) if a[i]!=a[i+1])-sum(1 for i in range(len(b)-1) if b[i]!=b[i+1]))
return c # Chai Wah Wu, Feb 15 2024
(PARI) a(n) = my(nb=0, k); for (i=2^n, 2^(n+1)-1, k = #Set(polrootsreal(Pol(binary(i)))); if (k>nb, nb=k)); nb; \\ Michel Marcus, Feb 15 2024
CROSSREFS
Sequence in context: A279220 A114575 A131849 * A244479 A090735 A090736
KEYWORD
nonn,more
AUTHOR
Keyang Li, May 05 2023
EXTENSIONS
a(14) on corrected by Robert Israel, May 07 2023
a(20)-a(22) from Michel Marcus, Feb 15 2024
a(23)-a(32) from Robin Visser, Aug 30 2024
STATUS
approved