Juggler sequence: Difference between revisions

Python example
m (timings)
(Python example)
Line 229:
 
function juggler(k, countdig=true, maxiters=20000)
series, m, maxj, maxjpos = [BigInt(k)], BigInt(k), BigInt(k), BigInt(0)
for i in 1:maxiters
m = iseven(m) ? isqrt(m) : isqrt(m*m*m)
Line 409:
5812827 135 67 d(n) = 7996276 digits
7110201 205 119 d(n) = 89981517 digits
</pre>
 
=={{header|Python}}==
Slowed to a crawl at n of 1267909, so did not run for larger n.
<lang python>
from math import isqrt
 
def juggler(k, countdig=True, maxiters=1000):
m, maxj, maxjpos = k, k, 0
for i in range(1, maxiters):
m = isqrt(m) if m % 2 == 0 else isqrt(m * m * m)
if m >= maxj:
maxj, maxjpos = m, i
if m == 1:
print(f"{k: 9}{i: 6,}{maxjpos: 6}{len(str(maxj)) if countdig else maxj: 20,}{' digits' if countdig else ''}")
return i
 
print("ERROR: Juggler series starting with $k did not converge in $maxiters iterations")
 
 
print(" n l(n) i(n) h(n) or d(n)\n-------------------------------------------")
for k in range(20, 40):
juggler(k, False)
 
for k in [113, 173, 193, 2183, 11229, 15065, 15845, 30817, 48443, 275485, 1267909]:
juggler(k)
 
juggler(7110201)
</lang>{{out}}
<pre>
n l(n) i(n) h(n) or d(n)
--------------------------------------------
20 3 0 20
21 9 4 140
22 3 0 22
23 9 1 110
24 3 0 24
25 11 3 52,214
26 6 3 36
27 6 1 140
28 6 3 36
29 9 1 156
30 6 3 36
31 6 1 172
32 6 3 36
33 8 2 2,598
34 6 3 36
35 8 2 2,978
36 3 0 36
37 17 8 24,906,114,455,136
38 3 0 38
39 14 3 233,046
113 16 9 27 digits
173 32 17 82 digits
193 73 47 271 digits
2183 72 32 5,929 digits
11229 101 54 8,201 digits
15065 66 25 11,723 digits
15845 139 43 23,889 digits
30817 93 39 45,391 digits
48443 157 60 972,463 digits
275485 225 148 1,909,410 digits
1267909 151 99 1,952,329 digits
</pre>
 
4,102

edits