use strict;
use warnings;
sub integer_factorize {
my ($n) = @_;
($n > 0) or return ();
($n > 1) or return (1);
my @factor;
if ($n % 2 == 0){
push(@factor, 2);
$n /= 2 while($n % 2 == 0);
($n > 2) or return (2);
}
my $r = sqrt($n);
for(my $i = 3; $i < $r; $i += 2){
($n % $i == 0) or next;
push(@factor, $i);
$n /= $i while($n % $i == 0);
($n > $i) or last;
}
push(@factor, $n) if ($n > 1);
return @factor;
}
foreach(
1,
2,
3,
4,
864,
865,
4294967297,
600851475143,
){
my @factor = integer_factorize($_);
print "$_: ", join(",", @factor), " max: ", $factor[-1], "\n";
}