A343462 Number of n-digit positive integers that undulate.
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
Examples
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.
Links
- Eric Weisstein's World of Mathematics, Undulating Number.
- Index entries for linear recurrences with constant coefficients, signature (5,10,-20,-15,21,7,-8,-1,1).
Programs
-
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
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)
Comments