login
A343462
Number of n-digit positive integers that undulate.
0
9, 81, 525, 3105, 18939, 114381, 693129, 4195557, 25405586, 153820395, 931359050, 5639156409, 34143908573, 206733865761, 1251728824798, 7578945799704, 45888871327435, 277847147039527, 1682304127857000, 10185986079451152, 61673933253012813, 373422269794761171, 2260990733622821388
OFFSET
1,1
COMMENTS
This is also the number of (2*n-1)-digit palindromes that undulate.
Classifying undulating numbers with n digits in initial digits and sign of first digit - second digit eases computation.
LINKS
Eric Weisstein's World of Mathematics, Undulating Number.
FORMULA
a(n) = 45*a(n-2) - 330*a(n-4) + 924*a(n-6) - 1287*a(n-8) + 1001*a(n-10) - 455*a(n-12) + 120*a(n-14) - 17*a(n-16) + a(n-18) for n >= 20. - Michael S. Branicky, Apr 17 2021
From Chai Wah Wu, Apr 24 2021: (Start)
a(n) = 5*a(n-1) + 10*a(n-2) - 20*a(n-3) - 15*a(n-4) + 21*a(n-5) + 7*a(n-6) - 8*a(n-7) - a(n-8) + a(n-9) for n > 10.
G.f.: x*(-8*x^9 + 7*x^8 + 63*x^7 - 45*x^6 - 162*x^5 + 81*x^4 + 150*x^3 - 30*x^2 - 36*x - 9)/(x^9 - x^8 - 8*x^7 + 7*x^6 + 21*x^5 - 15*x^4 - 20*x^3 + 10*x^2 + 5*x - 1). (End)
EXAMPLE
a(2) = 81 as there are 90 2-digit positive integers (10, 11, ..., 99). Of those, 11, 22, ..., 99 do not undulate as there is a pair of consecutive digits that are equal. There are nine nonundulating 2-digit numbers, leaving 90-9 = 81 that do undulate.
134 does not undulate as there are two pairs of consecutive digits where the right one is in both cases either smaller or larger. (In this case 1 < 3 and 3 < 4.)
143 does undulate since 1 < 4 and 4 > 3.
PROG
(PARI) first(n) = { my(res = vector(n), vup, vdown, nvup, nvdown); res[1] = 9; vup = vector(9, i, 1); vdown = vector(9, i, 1); for(i = 2, n, nvup = vector(9); nvdown = vector(9); nvdown[1] = vdown[9]; for(i = 2, 9, nvdown[i] = nvdown[i-1]+vup[i-1] ); for(i = 1, 8, nvup[i] = nvdown[9-i] ); vup = nvup; vdown = nvdown; res[i] = vecsum(vup)+vecsum(vdown)); res }
(Python)
def aupton(terms):
up, dn, alst = [0] + [1]*9, [0] + [1]*9, [9]
for n in range(2, terms+1):
up_next = [sum(dn[j] for j in range(i)) for i in range(10)]
dn_next = [sum(up[j] for j in range(i+1, 10)) for i in range(10)]
up, dn = up_next, dn_next
alst.append(sum(up + dn))
return alst
print(aupton(22)) # Michael S. Branicky, Apr 16 2021
(Python) # alternate program as a linear system
import numpy as np
from sympy import Matrix
def aupton(terms):
x = Matrix([0] + [1]*9 + [0] + [1]*9)
c = Matrix([[1]*20])
z10 = np.zeros((10, 10), dtype=np.int64)
o10 = np.ones((10, 10), dtype=np.int64)
A = Matrix(np.block([[z10, np.tril(o10, -1)], [np.triu(o10, +1), z10]]))
alst = [9]
for n in range(2, terms+1):
x = A*x
alst.append((c*x)[0])
return alst
print(aupton(22)) # Michael S. Branicky, Apr 16 2021
CROSSREFS
Cf. A057332. Apart from the first 2 terms, the same as A152464.
Sequence in context: A223719 A270295 A214618 * A207009 A196986 A293889
KEYWORD
nonn,easy,base
AUTHOR
David A. Corneth, Apr 16 2021
STATUS
approved