[seqfan] Re: A057652 has no more terms below 10^4

hv at crypt.org hv at crypt.org
Wed Oct 20 11:13:14 CEST 2010


Alonso Del Arte <alonso.delarte at gmail.com> wrote:
:Very interesting, Hugo. I have access to C but not Perl, though on the other
:hand, Perl is open source and I could download it for free?

Yes: start at <http://www.perl.org>.

For speed, pure number crunching of this type is about the worst task to
throw at scripting languages like perl - they are typically 10-100 times
slower than C for this. For other tasks, like text processing or I/O,
the performance is much more closely comparable to C.

However, they are great for rapid prototyping, so I can get several
algorithms implemented and debugged (and get a good idea of relative
performance) in the time I could get any one of them working in C.

And often, it turns out, this (relatively) slow performance for numeric
work is still good enough to get the required answer - I'd guess that for
some 75% of the "+hard +more" sequences I've extended, I needed only perl.

The approach I used for calculating the lucky numbers is very simple:

  my @lucky;  # list of lucky numbers, excluding 1
  my @skipped;  # for each lucky number, count those skipped since last deletion
  my $n = 1;

  CANDIDATE: while ($n < $limit) {
    $n += 2;
    for my $index (0 .. $#lucky) {
      if (++$skipped[$index] == $lucky[$index]) {
        $skipped[$index] = 0;  # this is a deletion
        next CANDIDATE;
      }
    }
	push @lucky, $n;  # we reached the end of the list without getting deleted
    push @skipped, @lucky + 1;  # +1 to account for 1 itself
    print $n;
  }

For calculating a large number of them, the trick will be to constrain the
memory use: this variant stores 2 integers for each lucky number seen.

Hugo




More information about the SeqFan mailing list