level2.pl (555B)
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 sub isPrime { 7 my $n = shift; 8 return 0 if ($n % 2 == 0); 9 for (my $i = 3; $i < sqrt($n); $i += 2) { 10 return 0 if ($n % $i == 0); 11 } 12 return 1; 13 } 14 15 my $nminus2 = 1; 16 my $nminus1 = 1; 17 my $n = 2; 18 19 until ($n > 227000 && isPrime($n)) { 20 $nminus2 = $nminus1; 21 $nminus1 = $n; 22 $n = $nminus2 + $nminus1; 23 } 24 25 print "X: $n\n"; 26 27 my $m = $n + 1; 28 29 # P + 1 % 2 == 0 for all P > 2 30 my $sum = 2; 31 for (my $i = 3; $i < sqrt($m); $i += 2) { 32 if ($m % $i == 0 && isPrime($i)) { 33 $sum += $i; 34 } 35 } 36 37 print "sum: $sum\n";