Polynomial_synthetic_division.md 872 B

Polynomial synthetic division

sub synthetic-division ( @numerator, @denominator ) {
    my @result = @numerator.clone;
    my $end    = @denominator.end;
 
    for ^@numerator-$end -> $i {
        next unless @result[$i];
        @result[$i] /= @denominator[0];
        @result[$i+$_] -= @denominator[$_] * @result[$i] for 1..$end;
    }
 
    'quotient' => @result[0 ..^ *-$end],
    'remainder' => @result[*-$end .. *];
}
 
my @tests =
[1, -12, 0, -42], [1, -3],
[1, 0, 0, 0, -2], [1, 1, 1, 1];
 
for @tests -> @n, @d {
    my %result = synthetic-division( @n, @d );
    say "[{@n}] / [{@d}] = [%result<quotient>], remainder [%result<remainder>]";
}

Output:

[1 -12 0 -42] / [1 -3] = [1 -9 -27], remainder [-123] 
[1 0 0 0 -2] / [1 1 1 1] = [1 -1], remainder [0 0 -1]