These functions determine the greatest common factor or least common multiple of a set of numbers. gcf() and lcm() take two numbers as arguments, and multigcf() and multilcm() will take any amount.
EDIT: fixed a bug in multigcf().

sub gcf {
my ($x, $y) = @_;
($x, $y) = ($y, $x % $y) while $y;
return $x;
}
sub lcm {
return($_[0] * $_[1] / gcf($_[0], $_[1]));
}
sub multigcf {
my $x = shift;
$x = gcf($x, shift) while @_;
return $x;
}
sub multilcm {
my $x = shift;
$x = lcm($x, shift) while @_;
return $x;
}

I found this function and it seemed reasonable, but some of my users reported that I was somtimes returning the wrong sign.
Turns out that the function above has inconsistent behavior on negative numbers:

Comment ongreatest common factorDownloadCode