in reply to finding perfect numbers
It's your lucky day! I coded an unoptimized solution. This runs pretty quickly (<10sec) but you could really improve the factor subroutine.
my @numbers = (1 .. 10000); my %factor_hash = (); my $number = 1; my @perfect_numbers = (); for $number (@numbers) { #do the factoring in a subroutine #store a string such as 1-2-4 for the factors of 4 $factor_hash{$number} = factor($number); } #time to check for perfection for $number (@numbers) { my $sum_of_factors = 0; my @factors = split /-/, $factor_hash{$number}; for my $factor (@factors) { $sum_of_factors+=$factor; } #a number is perfect if it equals half the sum of all factors # (because the number itself is a factor) if ($number == $sum_of_factors/2) { print "$number is perfect\n"; push @perfect_numbers, $number; } } sub factor { my $factor_string = ""; my $number = shift; for my $i ( 1 .. $number) { if (($number % $i) == 0) { $factor_string .= "-$i"; } } return $factor_string; } #OUTPUT #6 is perfect #28 is perfect #496 is perfect #8128 is perfect
According to wikipedia the output is correct.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: finding perfect numbers
by derpp (Acolyte) on Aug 05, 2010 at 20:22 UTC |