use bigint; $| = 1; sub forward { my $base = shift; my $prev = shift; my $sum = shift; my $carry = 1; my $next = 0; my $rank = 0; while ($prev or $sum or $carry) { my $dprev = $prev % $base; my $dsum = $sum % $base; if ($dprev + $dsum + $carry < $base) { $next += ($dprev + $carry) * $base**$rank; $carry = 0; } else { $next = 0; $carry = 1; } $prev = ($prev - $dprev) / $base; $sum = ($sum - $dsum ) / $base; $rank++; } return $next; } sub tobase { my $base = shift; my $n = shift; my @d = (); do { my $d = $n % $base; @d = ($d => @d); $n = ($n - $d)/$base; } while ($n); return @d; } sub simplify { my $base = shift; my $a = shift; my $sum = shift; while (($a % $base)==0 && (($sum % $base)==($base-1))) { $a = $a / $base; $sum = ($sum-$base+1) / $base; } return "$a-$sum"; } sub search { my $base = shift; my @values = (); my $a = 0; my $sum = 0; my %seen = (); for (my $n=1;; $n++) { $a = forward($base, $a, $sum); $sum += $a; push @values => [$a, $sum]; my $key = simplify($base, $a, $sum); if (exists $seen{$key}) { return ($n - $seen{$key} => @values); } else { $seen{$key} = $n; } } } print "
\n";
print "

A278743

\n"; print "\n"; print "\n"; foreach my $base (2..42) { print STDERR "At base $base...\n"; my ($a, @values) = search($base); print "\n"; print "\n"; print "\n"; my $k0 = $#values-$a; print "\n"; my $b = scalar(tobase($base, $values[$#values][0]/$values[$#values-$a][0]))-1; print "\n"; print ""; print "\n"; } print "
na(n)k0bcn
$base$a$k0$b"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print ""; print "\n"; foreach my $k (0..$#values) { my $c = $values[$k][0]; my $sum = $values[$k][1]; my $bgcolor; if ($k==$#values) { $bgcolor = "white"; } elsif ($k < $#values-$a) { $bgcolor = "peachpuff"; } else { $bgcolor = "PaleTurquoise"; } print ""; print "\n"; print "\n"; my @c = tobase($base, $c); my @sum = tobase($base, $sum); my $skipped = 0; while (@c && @sum && ($c[$#c]%$base)==0 && ($sum[$#sum]%$base)==($base-1)) { $c = $c / $base; $sum = ($sum - $base + 1)/$base; pop @c; pop @sum; $skipped++; } print "\n"; print "\n"; print ""; } print "
kc$base(k)In base $base
c$base(k)Partial sum
", $k+1, "$c"; print join($base <=10 ? "" : "," => (map {"$_" } @c), ("0") x $skipped); print ""; print join($base <=10 ? "" : "," => (map {"$_" } @sum), ( ("" . ($base-1) . "") ) x $skipped); print "
\n"; print "
\n"; print "
\n";