[ create a new paste ] login | about

Link: http://codepad.org/eMe8JqZ5    [ raw code | output | fork ]

Perl, pasted on Feb 5:
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";
}


Output:
1
2
3
4
5
6
7
8
1: 1 max: 1
2: 2 max: 2
3: 3 max: 3
4: 2 max: 2
864: 2,3 max: 3
865: 5,173 max: 173
4294967297: 641,6700417 max: 6700417
600851475143: 71,839,1471,6857 max: 6857


Create a new paste based on this one


Comments: