One-two primes: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→Generalized: A little less terse. Exact same functionality but better names and whitespace) |
SqrtNegInf (talk | contribs) m (→{{header|Perl}}: improved 'condense' (no args required)) |
||
Line 371: | Line 371: | ||
use ntheory 'is_prime'; |
use ntheory 'is_prime'; |
||
sub condense |
sub condense($n) { $n =~ /^((.)\2+)/; my $i = length $1; $i>9 ? "($2 x $i) " . substr($n,$i) : $n } |
||
sub combine ($d, $a, $b, $s='') { |
sub combine ($d, $a, $b, $s='') { # NB: $a < $b |
||
if ($d == 1 && is_prime $s.$a) { return $s.$a |
if ($d == 1 && is_prime $s.$a) { return $s.$a |
||
} elsif ($d == 1 && is_prime $s.$b) { return $s.$b |
} elsif ($d == 1 && is_prime $s.$b) { return $s.$b |
||
Line 382: | Line 382: | ||
my($a,$b) = (1,2); |
my($a,$b) = (1,2); |
||
say "Smallest n digit prime using only $a and $b (or '0' if none exists):"; |
say "Smallest n digit prime using only $a and $b (or '0' if none exists):"; |
||
printf "%4d: %s\n", $_, combine($_,$a,$b) |
printf "%4d: %s\n", $_, combine($_,$a,$b) for 1..20; |
||
printf "%4d: %s\n", $_, condense |
printf "%4d: %s\n", $_, condense combine($_,$a,$b) for map 100*$_, 1..20; |
||
($a,$b) = (7,9); |
($a,$b) = (7,9); |
||
say "\nSmallest n digit prime using only $a and $b (or '0' if none exists):"; |
say "\nSmallest n digit prime using only $a and $b (or '0' if none exists):"; |
||
printf "%4d: %s\n", $_, condense |
printf "%4d: %s\n", $_, condense combine($_,$a,$b) for 1..20, 100, 200; |
||
# 1st term missing |
# 1st term missing |