login
Indices of the harmonic numbers in the Stern-Brocot sequence (A002487).
1

%I #23 Nov 08 2022 18:02:28

%S 0,1,5,125,8195,32675,755,34763,520283,37773179,21743337467,

%T 4647489635464983347207,1236947931143,272658152711,

%U 604398345569737906323527,9595849053479089263878087,3693713292455,288389531265129191,11150032316898390632304469945009811031588839

%N Indices of the harmonic numbers in the Stern-Brocot sequence (A002487).

%C We assume the harmonic numbers to start with H(0) = 0.

%D Edsger W. Dijkstra, Selected Writings on Computing, Springer, 1982, p. 232 (sequence A002487 is called fusc).

%H Edsger W. Dijkstra, <a href="http://www.cs.utexas.edu/users/EWD/ewd05xx/EWD578.PDF">More about the function "fusc"</a>.

%H Peter Luschny, <a href="http://www.oeis.org/wiki/User:Peter_Luschny/SternsDiatomic">Rational Trees and Binary Partitions</a>.

%H Rémy Sigrist, <a href="/A358110/a358110.png">Logarithmic binary plot of the sequence for n = 0..2048</a>

%F a(n) = A355090(A001008(n), A002805(n)) for any n > 0. - _Rémy Sigrist_, Nov 08 2022

%e Let Fusc(n) = fusc(n) / fusc(n + 1) where fusc = A002487.

%e 0 = H(0) = Fusc(0) => a(0) = 0.

%e 1 = H(1) = Fusc(1) => a(1) = 1.

%e (3/2) = H(2) = Fusc(5) => a(2) = 5.

%e (11/6) = H(3) = Fusc(125) => a(3) = 125.

%e (25/12) = H(4) = Fusc(8195) => a(4) = 8195.

%e (137/60) = H(5) = Fusc(32675) => a(5) = 32676.

%e (49/20) = H(6) = Fusc(755) => a(6) = 755.

%e (363/140) = H(7) = Fusc(34763) => a(7) = 34763.

%e (761/280) = H(8) = Fusc(520283) => a(8) = 520283.

%o (PARI) a(n) = { my (h=sum(i=1, n, 1/i), x=numerator(h), y=denominator(h)); if (x==0, 0, my (v=0, t=1, a=0, b=1, c=1, d=0); while (1, my (m=a+c, n=b+d); if (x*n==y*m, return (t+v), x*n<y*m, [c, d]=[m, n], [v, a, b]=[v+t, m, n]); t*=2)) } \\ _Rémy Sigrist_, Nov 08 2022

%o (Python) # using function harmonic from A001008

%o def A358110(n: int) -> int:

%o if n == 0: return 0

%o x, y = harmonic(1, n + 1)

%o a = d = v = 0

%o b = c = t = 1

%o while True:

%o m = a + c

%o n = b + d

%o if x * n == y * m:

%o return v + t

%o if x * n < y * m:

%o c, d = m, n

%o else:

%o v, a, b = v + t, m, n

%o t *= 2

%o print([A358110(n) for n in range(19)]) # (after _Rémy Sigrist_) _Peter Luschny_, Nov 08 2022

%Y Cf. A002487, A001008/A002805 (harmonic), A355090.

%K nonn

%O 0,3

%A _Peter Luschny_, Nov 08 2022

%E More terms from _Rémy Sigrist_, Nov 08 2022