summaryrefslogtreecommitdiffstats
path: root/047.pl
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-05-19 23:28:39 -0500
committerJesse Luehrs <doy@tozt.net>2009-05-19 23:28:39 -0500
commit910b24fd10c1075640f1fbbbafac0b33b779e363 (patch)
treef5a260923c6ee2b0bd89ff31d72667bf6f4df0a7 /047.pl
parenta610f19b4deee966456845d83795a6f832c5e7a4 (diff)
downloadprojecteuler-910b24fd10c1075640f1fbbbafac0b33b779e363.tar.gz
projecteuler-910b24fd10c1075640f1fbbbafac0b33b779e363.zip
solved 47
Diffstat (limited to '047.pl')
-rwxr-xr-x047.pl47
1 files changed, 47 insertions, 0 deletions
diff --git a/047.pl b/047.pl
new file mode 100755
index 0000000..2f15475
--- /dev/null
+++ b/047.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use integer;
+use Math::Prime::XS qw/sieve_primes/;
+use List::MoreUtils qw/all uniq/;
+use 5.010;
+
+my @primes = sieve_primes(1e6);
+my %primes = map { $_, 1 } @primes;
+my %factors;
+
+sub factors {
+ my ($n_orig) = @_;
+ my @ret;
+ my $prime_idx = 0;
+ my $n = $n_orig;
+ while ($n > 1) {
+ if (exists $factors{$n}) {
+ push @ret, @{ $factors{$n} };
+ last;
+ }
+ if (exists $primes{$n}) {
+ push @ret, $n;
+ last;
+ }
+ my $prime = $primes[$prime_idx];
+ if (($n / $prime) * $prime == $n) {
+ $n /= $prime;
+ push @ret, $prime;
+ }
+ else {
+ $prime_idx++;
+ }
+ }
+ $factors{$n_orig} = \@ret;
+ return @ret;
+}
+
+map { factors($_) } 1..1000000;
+
+for my $n (0..999996) {
+ if (all { $_ >= 4 } map { scalar uniq @$_ } @factors{$n..($n + 3)}) {
+ print $n + 1, "\n";
+ last;
+ }
+}