欧拉计划题目3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
(http://projecteuler.net/problem=1)
13195的质数因子有5,7,13和29.
600851475143的最大质数因子是多少?
(http://pe.spiritzhang.com/index.php/2011-05-11-09-44-54/4-3)
这个题目的关键是一个求质数的函数(或是判断一个数是否为质数)
#!perl -w use 5.010; use strict; my $num = 600851475143; sub isprime{ #验证一个整数(较小)是否为质数,是返回1,否返回0 my $n = shift; state (%prime,@primes, $prime,$maxtest); unless($maxtest){ @primes = (2); $prime{2} = 1; $maxtest = 2; } if ($n > $maxtest){ foreach my $m(($maxtest+1)..$n){ my $state = 0; foreach $prime(@primes){ if ($prime > sqrt $m){ last; } if ($m % $prime == 0){ $prime{$m} = 0; $state = 1; last; } } unless ($state){ push @primes ,$m; $prime{$m} = 1; } } $maxtest = $n; return $prime{$n}; } else{ return $prime{$n}; } } my $i = 2; while ($num > ($i+1)){ if (isprime ($i)){ while ($num % $i == 0){ $num = $num / $i; #say "$num $i"; } } $i++; } say $num;
需要说明的是:倒数第八行,是while而不是if,是因为if只判断1次(也只除一次),而一个数的质因子可能重复出现(比如175=5*5*7,质因子只有5和7)。虽然此题中while和if的结果是一样的,但你可以把600851475143换成600851475143 * 71 *839。看看你的程序结果是否还正确。