in reply to Recamán's sequence and memory usage

Athanasius, thanks for your interesting write-up. Here is a little version using vec for storing which numbers have been seen already. It runs quite happily until it hits integer overflow... It only prints a line when the maximum observed or the minimum unobserved increases.

use strict; use warnings; my $min = 2; # smallest unused number my $max = 3; # largest number already visited my $n = 2; my $r = 3; my $s; vec($s,$_,1)=1 for (0,1,3); my $flag = 1; while(++$n){ $r += ($r-$n>0) && not( vec($s,$r-$n,1) ) ? -$n : $n; vec($s,$r,1)=1; $min++, $flag=1 while vec($s,$min,1); $max = $r, $flag=1 if $r > $max; print "$n\t$max\t$min\t$r\t".length($s)."\n" if $flag; $flag = 0; }

Replies are listed 'Best First'.
Re^2: Recamán's sequence and memory usage
by Athanasius (Archbishop) on Jul 14, 2015 at 06:23 UTC

    Hello hdb,

    Brilliant use of vec, producing fast and very clever code. Bravo!

    But — running your script on my system, I didn’t get anywhere near integer overflow before Windows effectively froze, with Task Manager showing memory at 97% and disk at 100%. (I didn’t time it, but it can’t have taken more than an hour or two to get to this point.) The console read:

    2162984298 13994685375 1355 13994685375 1749335672

    So then I ran my script to see if it would get that far. 14 hours and 37 minutes later (!) it had reached:

    n = 2177458553, elapsed time: 52649.9s

    with Task Manager showing memory at 60% and disk at 0%.

    :-)

    Cheers,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,