Egyptian division: Difference between revisions

→‎{{header|Perl}}: Fixes bug, *much* faster.
(Add Factor example)
(→‎{{header|Perl}}: Fixes bug, *much* faster.)
Line 1,397:
<lang perl>sub egyptian_divmod {
my($dividend, $divisor) = @_;
die "Invalid divisor" if $divisor <= 0;
my(%multiples,%table);
 
$multiples{2**$_}my @table = 2**$_ * $divisor for 0..1+($divisor/2);
push @table, 2*$table[-1] while $table[-1] <= $dividend;
 
for my $k (sort {$a <=> $b} keys %multiples) {
last if $multiples{$k} > $dividend;
$table{$k} = $multiples{$k};
}
 
my $accumulator = 0;
for my $k (sortreverse {$b0 <=>.. $a} keys %#table) {
next unless $dividend >= $table{[$k}];
$accumulator += 1 << $k;
$dividend -= $table{[$k}];
}
$accumulator, $dividend;
Anonymous user