[go: up one dir, main page]

login
A030141
Numbers in which parity of the decimal digits alternates.
37
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 21, 23, 25, 27, 29, 30, 32, 34, 36, 38, 41, 43, 45, 47, 49, 50, 52, 54, 56, 58, 61, 63, 65, 67, 69, 70, 72, 74, 76, 78, 81, 83, 85, 87, 89, 90, 92, 94, 96, 98, 101, 103, 105, 107, 109, 121, 123, 125, 127, 129
OFFSET
1,3
COMMENTS
An alternating integer is a positive integer for which, in base-10, the parity of its digits alternates.
The number of terms < 10^n (n>=0): 1, 10, 55, 280, 1405, 7030, 35155, ..., . - Robert G. Wilson v, Apr 01 2011
The number of terms between 10^n and 10^(n+1) is 9 * 5^n for n>=0. For n>=0, number of terms < 10^n is 1 + 9 * (5^n-1)/4. - Franklin T. Adams-Watters, Apr 01 2011
A228710(a(n)) = 1. - Reinhard Zumkeller, Aug 31 2013
LINKS
45th International Mathematical Olympiad (45th IMO), Problem #6 and Solution, Mathematics Magazine, 78 (2005), pp. 247, 250, 251.
EXAMPLE
121 is alternating and in the sequence because its consecutive digits are odd-even-odd, 1 being odd and 2 even. Of course, 1234567890 is also alternating.
MATHEMATICA
fQ[n_] := Block[{m = Mod[ IntegerDigits@ n, 2]}, m == Split[m, UnsameQ][[1]]]; Select[ Range[0, 130], fQ] (* Robert G. Wilson v, Apr 01 2011 *)
PROG
(Haskell)
a030141 n = a030141_list !! (n-1)
a030141_list = filter ((== 1) . a228710) [0..]
-- Reinhard Zumkeller, Aug 31 2013
(PARI) is(n, d=digits(n))=for(i=2, #d, if((d[i]-d[i-1])%2==0, return(0))); 1 \\ Charles R Greathouse IV, Jul 08 2022
(Python)
from itertools import count
def A030141_gen(startvalue=0): # generator of terms >= startvalue
return filter(lambda n:all(int(a)+int(b)&1 for a, b in zip(str(n), str(n)[1:])), count(max(startvalue, 0)))
A030141_list = list(islice(A030141_gen(), 30)) # Chai Wah Wu, Jul 12 2022
(Python)
from itertools import chain, count, islice
def altgen(seed, digits):
allowed = "02468" if seed in "13579" else "13579"
if digits == 1: yield from allowed; return
for f in allowed: yield from (f + r for r in altgen(f, digits-1))
def agen(): yield from chain(range(10), (int(f+r) for d in count(2) for f in "123456789" for r in altgen(f, d-1)))
print(list(islice(agen(), 65))) # Michael S. Branicky, Jul 12 2022
CROSSREFS
KEYWORD
nonn,base,easy
EXTENSIONS
Offset corrected by Reinhard Zumkeller, Aug 31 2013
STATUS
approved