`use strict;
use warnings;
use Math::Factor::XS 'prime_factors';
my $n = shift;
( $n and $n > 0 and $n == int $n ) or die "Need positive integer as in
+put!\n";
my %p;
$p{$_}++ for prime_factors( $n );
my $radical = 1;
$radical *= $_ for grep { $p{$_}%2 } keys %p;
print "sqrt( $n ) = ", sqrt( $n/$radical ), " * sqrt( $radical )\n";
`
What I was missing is a `product` function, like `sum` from `List::Util`. There is one in the replacement `List::Util` that comes with `Scalar::Util` but that means overwriting the standard module which makes me feel uncomfortable. |
Comment onConverting a Number into a Radical