palindrome_iteration.pl 939 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/perl
  2. # A nice algorithm, due to David A. Corneth (Jun 06 2014), for interating over palindromic numbers in base 10.
  3. # See also:
  4. # https://oeis.org/A002113
  5. # https://en.wikipedia.org/wiki/Palindromic_number
  6. # This program illustrates how to compute terms of:
  7. # https://oeis.org/A076886
  8. use 5.020;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(:all);
  12. use experimental qw(signatures);
  13. my $n = 1;
  14. my @d = split(//, $n);
  15. my %table;
  16. while (1) {
  17. my $r = prime_bigomega($n);
  18. if (not exists $table{$r}) {
  19. say "a($r) = $n";
  20. $table{$r} = 1;
  21. }
  22. my $l = $#d;
  23. my $i = ((scalar(@d) + 1) >> 1) - 1;
  24. while ($i >= 0 and $d[$i] == 9) {
  25. $d[$i] = 0;
  26. $d[$l - $i] = 0;
  27. $i--;
  28. }
  29. if ($i >= 0) {
  30. $d[$i]++;
  31. $d[$l - $i] = $d[$i];
  32. }
  33. else {
  34. @d = (0) x (scalar(@d) + 1);
  35. $d[0] = 1;
  36. $d[-1] = 1;
  37. }
  38. $n = join('', @d);
  39. }