2014-02-28 173 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