[ create a new paste ] login | about

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

Perl, pasted on Feb 5:
# 単純な素因数分解
use strict;
use warnings;
use bigint;

my $n = Math::BigInt->new("600851475143"); 
my $s = int(sqrt($n));
my @list = ();
my $fmax = 1;
return 1 if $n == 1;

print "$n\n";
for (my $x=2; $x<=$s && $n > 1; $x+=2) {
	my $c = 0;
	while ($n % $x == 0) {
		++$c;
		$n /= $x;
	}
	if ($c > 0) {
		push(@list, expr($x,$c));
		$fmax = $x;
	}
	$x = 1 if $x == 2;	# $x = {2, 3, 5, 7...} にするためのショボい仕掛け
}
print join(' * ', @list), "\n";
print "Answer: $fmax\n";


sub expr {
	my ($b, $p) = @_;
	return ($p == 1) ?
			sprintf("%d", $b)
			:sprintf("%d^%d", $b, $p)
		;
}

__END__

実行結果

600851475143
71 * 839 * 1471 * 6857
Answer: 6857


Output:
1
2
3
600851475143
71 * 839 * 1471 * 6857
Answer: 6857


Create a new paste based on this one


Comments: