in reply to Re^5: OT: Finding Factor Closest To Square Root
in thread OT: Finding Factor Closest To Square Root

Here's an Algorithm::Loops solution, then, based on lidden's nifty solution:
use strict; use warnings; use List::Util qw[ reduce ]; use Algorithm::Loops 'NextPermuteNum'; sub closest{ my $exact = sqrt(shift); my $best = 1; do { my $guess = 1; for (@_) { $guess *= $_; $best = $guess if (abs($exact - $guess) < abs($exact - $be +st)); last if $guess > $exact; } } while NextPermuteNum(@_); $best; } my @pfs = (2,2,3,3,5,5,7); # Compute product of factors our ($a, $b); my $num = reduce { $a * $b } @pfs; my $root = sqrt $num; print "N=$num, R=$root\n"; print closest($num, @pfs), "\n";

Caution: Contents may have been coded under pressure.