use prime; use List::MoreUtils qw(true); use strict; my @prime = prime::make_prime_table(100 * 10000); my %prime_div_cache; for (my $n = 644; $n < 100 * 10000; ++$n) { my @pd1 = get_prime_divisor($n); my @pd2 = get_prime_divisor($n + 1); my @pd3 = get_prime_divisor($n + 2); my @pd4 = get_prime_divisor($n + 3); if (prime4(\@pd1, \@pd2) && prime4(\@pd2, \@pd3) && prime4(\@pd3, \@pd4) ) { print "$n\n"; exit(0); } } sub get_prime_divisor { my $n = shift; if (exists($prime_div_cache{$n})) { return @{$prime_div_cache{$n}}; } $prime_div_cache{$n} = []; @{$prime_div_cache{$n}} = prime::get_prime_divisor($n, \@prime); return @{$prime_div_cache{$n}}; } sub prime4 { my ($p1, $p2) = @_; if (scalar(@$p1) >= 4 && scalar(@$p2) >= 4 && scalar(true { my $ret = 1; foreach my $n (@$p2) { if ($_ == $n) { $ret = 0; last; } } $ret; } @$p1) >= 4) { return 1; } return 0; }