summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
+ }
+}