$| = 1; my $cat = ""; # concatenation of all terms sub bin { return sprintf "%b", shift; } my $unseen = 0; my %seen = (); my %inverse = (); my $max = 10_000; my $w = 0; my $p = ""; # previous term foreach my $n (0..1_000_000) { foreach my $v ($unseen..1_000_000_000) { if (not exists $seen{$v}) { if (index($cat, bin($p+$v))<0) { $seen{$v}++; while (exists $seen{$unseen}) { $unseen++; } if ($v <= $max) { $inverse{$v} = $n; while (exists $inverse{$w}) { print "$w $inverse{$w}\n"; $w++; } } $cat .= bin($v); $p = $v; last; } } } last if $w > $max; }