``````#!/usr/bin/perl

# Representation of quadratic polynomials in terms of their zeros.

# Let:
#    P(x) = a*x^2 + b*x + c

# Let (m, n) be the solutions to P(x) = 0

# Then:
#   P(x) = c * (1 - x/m) * (1 - x/n)

use 5.014;
use strict;
use warnings;

use Math::Bacovia qw(:all);
use Math::AnyNum qw(isqrt);

my (\$x, \$y, \$z) = @_;
(
Fraction((-\$y + isqrt(\$y**2 - 4 * \$x * \$z)), (2 * \$x)),
Fraction((-\$y - isqrt(\$y**2 - 4 * \$x * \$z)), (2 * \$x)),
);
}

my @poly = (
[  3, -15,   -42],
[ 20, -97, -2119],
[-43,  29, 14972],
);

my \$x = Symbol('x');

foreach my \$t (@poly) {

my \$expr = \$t->[0] * \$x**2 + \$t->[1] * \$x + \$t->[2];

my \$f1 = (1 - \$x / \$x1);
my \$f2 = (1 - \$x / \$x2);

printf("%s = %s * %s * %s\n",
\$expr->pretty,
\$f1->simple->pretty,
\$f2->simple->pretty,
\$t->[2],
);
}

__END__

((3 * x^2) + (-15 * x) + -42) = (1 - (x/7)) * (1 - (x/-2)) * -42
((20 * x^2) + (-97 * x) + -2119) = (1 - (x/13)) * (1 - (x/(-326/40))) * -2119
((-43 * x^2) + (29 * x) + 14972) = (1 - (x/(-788/43))) * (1 - (x/19)) * 14972
``````