my @seen = (); sub other { my $n = shift; my $a = 1; while ($seen[$a] || ($a & $n)!=0) { $a++; } $seen[$a]++; return $a; } foreach my $n (1..10_000) { my $a = other($n); print "$n $a\n"; }