use Math::BigInt; my $m = Math::BigInt->new("317584931803"); my $n=1000000; # $n*$n>$m my @c; # $c[$k]==1 for $k composite, 2<=$k<=$n # sieve to find primes + brute force factor while ($m % 2 == 0) { print "2\n"; $m = $m/2; } for ($j=2;$j<=$n/2;$j++) { $c[2*$j] = 1; } for ($i=3;$i<$n;$i+=2) { if (!$c[$i]) { while ($m % $i==0) { print "$i\n"; $m = $m/$i; } if ($i*$i<=$n) { for ($j=2;$j<=$n/$i;$j++) { $c[$i*$j] = 1; } } } } print "$m\n" if ($m>1);