2014-02-28 174 views
0

欧拉问题工作3分段故障

The prime factors of 13195 are 5, 7, 13 and 29. 
What is the largest prime factor of the number 600851475143 ? 

这里是我的Perl代码只是先尝试​​让所有的因素,但它得到了分段错误,我的Perl年龄只是约2月,能不知道为什么。分段错误11当我运行它。

#!/usr/bin/perl 
use warnings; 
use strict; 

my $number = 600851475143; 
my @factors = grep {$number % $_ == 0} (1..$number); 
print @factors; 

用sudo再次运行它,没有更多的段错误,但没有打印出来。

+0

是的,删除了打印代码 –

+0

'(1 .. $号)'会产生2T阵列。你使用的是64位操作系统吗? –

+0

是的,Mac OS X 10.8.5,perlbrew Perl 5.18.2。试过bigint,没有任何区别。 –

回答

3

Google搜索代码“euler problem 3”并翻译了Python代码。

use strict; 
use warnings; 

sub largest_prime_factor { 
    my $n = shift; 

    my $largest_factor = 1; 

    # remove any factors of 2 first 
    while ($n % 2 == 0) { 
     $largest_factor = 2; 
     $n /= 2; 
    } 

    # now look at odd factors 
    my $p = 3; 
    while ($n != 1) { 
     while ($n % $p == 0) { 
      $largest_factor = $p; 
      $n /= $p; 
     } 
     $p += 2 
    } 

    return $largest_factor 
} 

print largest_prime_factor(600851475143); 

1; 

__END__ 

或依赖老好人CPAN:

use Math::Prime::Util qw(factor); 
use List::Util qw(max); 

use strict; 
use warnings; 

print max factor(600851475143); 
+1

CPAN解决方案现在稍微容易一些:perl -E'use ntheory“:all”;说vecmax(因子(600851475143));' – DanaJ