in reply to Can It Be Written In Base X With Only 1s And 0s

The following uses an iterator that returns the next highest sum of powers of the largest base. It then checks if that sum consists of just ones and zeroes in the other bases.

use strict; use warnings; use Math::BigInt qw( ); # Skips over 0 and 1. sub make_iter { my ($base) = @_; my $num = Math::BigInt->new(1); my @digits = 1; # -1 represents zero. my @powers = Math::BigInt->new(1); return sub { if ($digits[-1] > 0) { push @digits, -1; push @powers, $powers[-1] * $base; } for (0..$#digits) { $digits[$_] = -$digits[$_]; $num += $digits[$_] * $powers[$_]; return $num if $digits[$_] > 0; } }; } sub test { my ($num, $base) = @_; while ($num > 0) { my $digit = $num % $base; return 0 if $digit > 1; $num = ($num - $digit)/$base; } return 1; } { my $i = $ARGV[0] || 5; my $candidate_num; my $num; my $iter = make_iter($i); CANDIDATE: while (1) { $num = $iter->(); if (++$candidate_num == 10_000) { $candidate_num = 0; print("> $num\n"); } for my $base (reverse 3..$i-1) { next CANDIDATE if !test($num, $base); } last; } print("$num\n"); }

Note: If f(6) exists, it must have more than 2184 digits in base 10[Reference]. As such, I included support for large numbers.

Replies are listed 'Best First'.
Re^2: Can It Be Written In Base X With Only 1s And 0s
by ikegami (Patriarch) on Jun 15, 2015 at 22:45 UTC

    sub make_iter { my ($base) = @_; my $num = Math::BigInt->new(1); my @digits = 1; # -1 represents zero. my @powers = Math::BigInt->new(1); return sub { if ($digits[-1] > 0) { push @digits, -1; push @powers, $powers[-1] * $base; } for (0..$#digits) { $digits[$_] = -$digits[$_]; $num += $digits[$_] * $powers[$_]; return $num if $digits[$_] > 0; } }; }
    is probably faster as
    sub make_iter { my ($base) = @_; my $num = Math::BigInt->new(1); return sub { $num->binc; return Math::BigInt->new( $num->as_bin() =~ s/^0?b//r ); }; }
    with a fast back-end.
      I'm confused about this line:
      return Math::BigInt->new( $num->as_bin() =~ s/^0?b//r );

      It seems to be taking the binary representation, and making a new object in base 10, and returning that?

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of

        oops, yeah, that's what it does, but it should be base $base instead of base 10. And M::BI doesn't have a way of doing that.