use prime; use strict; our @prime = prime::make_prime_table(100 * 10000); my $prime_count = 0; my $prime_rate = 1.0; my $n; my $side_count = 5; for ($n = 3; ; $n += 2, $side_count += 4) { $prime_count += count_prime(get_4side($n)); $prime_rate = $prime_count / $side_count; if ($prime_rate < 0.1) { print "$n, $prime_rate\n"; exit(0); } } sub count_prime { my @sidenums = @_; my $count = 0; foreach my $p (@sidenums) { if (prime::is_prime($p, \@prime)) { ++$count; } } return $count; } sub get_4side { my $n = shift; my $rb = $n * $n; my $lb = $rb - ($n - 1); my $lt = $lb - ($n - 1); my $rt = $lt - ($n - 1); return ($rb, $lb, $lt, $rt); }