use strict;
use warnings;
my $num = shift || 600851475143;
my @primes = ( 0..int(sqrt($num)) ) ;
# sieve: get primes under the number
for ( @primes ){
unless ( $_ == 1 or $_ == 0 ){
my $b = 2 * $_ ;
while ( $b <= $#primes ) {
$primes[$b] = 0 ;
$b += $_ ;
}
}
}
# get factors of the number
@primes = sort{$a<=>$b} grep{$_>1} grep{$num%$_==0} grep{$_>0} @primes ;
# output factors
map {print "$_ " }@primes ;
print "\n" ;
# output max factor
print pop @primes ;
print "\n" ;