login
Concatenate the natural numbers, then partition into minimal strings so that adjacent terms have a common divisor greater than 1.
2

%I #17 Dec 04 2021 12:34:07

%S 12,3,45,6,78,9,1011,12,1314,15,1617,18,192,0,2,12,2,2,32,4,2,52,6,2,

%T 72,8,2,930,3,132,3,3,3,435,3,6,3,738,3,9,4041,42,4,34,4,4,54,6,4,74,

%U 8,4,950,5,15,25,35,45,5,5,65,75,85,960,6,16,2,6,3,6

%N Concatenate the natural numbers, then partition into minimal strings so that adjacent terms have a common divisor greater than 1.

%C 00 -> 0 is not allowed, else all digits will not appear in the concatenation of terms. For example, a(198)..a(201) = 198, 19920, 0, 2 and not 198, 192, 0, 2. - _Michael S. Branicky_, Dec 03 2021

%H Michael S. Branicky, <a href="/A258227/b258227.txt">Table of n, a(n) for n = 1..10000</a> (24 terms corrected in terms 1..10000 from Reinhard Zumkeller)

%F GCD(a(n), a(n+1)) > 1.

%e . a(n) | 12,3,45,6,78,9,1011,12,1314,15,1617,18,192,0,2,12,2,2,32,4,2,52

%e --------+----------------------------------------------------------------

%e . gcd | 3 3 3 6 3 3 3 6 3 3 3 6 192 2 2 2 2 2 4 2 2 .

%o (Haskell)

%o a258227 n = a258227_list !! (n-1)

%o a258227_list = f 12 1 (map toInteger $ tail a007376_list) where

%o f x y (d:ds) | gcd x y > 1 = y : f y d ds

%o | otherwise = f x (10 * y + d) ds

%o (Python)

%o from math import gcd

%o from itertools import count

%o def diggen():

%o for k in count(1): yield from list(map(int, str(k)))

%o def aupton(terms):

%o g = diggen()

%o alst, aset = [12], {12}

%o _, _, nxtd, nxtnxtd = next(g), next(g), next(g), next(g)

%o for n in range(2, terms+1):

%o an, nxtd, nxtnxtd = nxtd, nxtnxtd, next(g)

%o while gcd(an, alst[-1]) == 1 or nxtd == nxtnxtd == 0:

%o an, nxtd, nxtnxtd = int(str(an) + str(nxtd)), nxtnxtd, next(g)

%o alst.append(an); aset.add(an)

%o return alst

%o print(aupton(70)) # _Michael S. Branicky_, Dec 03 2021

%Y Cf. A002782, A007376.

%K nonn,base

%O 1,1

%A _Reinhard Zumkeller_, May 23 2015