Jump to content

Klarner-Rado sequence: Difference between revisions

Created Nim solution.
No edit summary
(Created Nim solution.)
Line 906:
2911581
54381285</pre>
 
=={{header|Nim}}==
{{trans|C}}
Actually, this is not a direct translation, but an adaptation which uses the very efficient algorithm of the C solution. To find the 10_000_000 first elements, the program takes less than 80 ms on an Intel Core i5-8250U 1.60GHz.
<syntaxhighlight lang="Nim">import std/[strformat, strutils]
 
const Elements = 10_000_000
type KlarnerRado = array[1..Elements, int]
 
proc initKlarnerRado(): KlarnerRado =
var i2, i3 = 1
var m2, m3 = 1
for i in 1..result.high:
let m = min(m2, m3)
result[i] = m
if m2 == m:
m2 = result[i2].int shl 1 or 1
inc i2
if m3 == m:
m3 = result[i3].int * 3 + 1
inc i3
 
let klarnerRado = initKlarnerRado()
 
echo "First 100 elements of the Klarner-Rado sequence:"
for i in 1..100:
stdout.write &"{klarnerRado[i]:>3}"
stdout.write if i mod 10 == 0: '\n' else: ' '
echo()
 
var i = 1000
while i <= Elements:
echo &"The {insertSep($i)}th element of Klarner-Rado sequence is {insertSep($klarnerRado[i])}"
i *= 10
</syntaxhighlight>
 
{{out}}
<pre>First 100 elements of the Klarner-Rado sequence:
1 3 4 7 9 10 13 15 19 21
22 27 28 31 39 40 43 45 46 55
57 58 63 64 67 79 81 82 85 87
91 93 94 111 115 117 118 121 127 129
130 135 136 139 159 163 165 166 171 172
175 183 187 189 190 193 202 223 231 235
237 238 243 244 247 255 256 259 261 262
271 273 274 279 280 283 319 327 331 333
334 343 345 346 351 352 355 364 367 375
379 381 382 387 388 391 405 406 409 418
 
The 1_000th element of Klarner-Rado sequence is 8_487
The 10_000th element of Klarner-Rado sequence is 157_653
The 100_000th element of Klarner-Rado sequence is 2_911_581
The 1_000_000th element of Klarner-Rado sequence is 54_381_285
The 10_000_000th element of Klarner-Rado sequence is 1_031_926_801
</pre>
 
=={{header|Perl}}==
256

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.