Extra primes
n is an extra prime if n is prime and its digits and sum of digits are also primes.
Factor
<lang factor>USING: formatting io kernel math math.functions math.primes sequences sequences.extras ;
- digit ( seq seq -- seq ) [ suffix ] cartesian-map concat ;
- front ( -- seq ) { { 2 } { 3 } { 5 } { 7 } } ;
- middle ( seq -- newseq ) { 2 3 5 7 } digit ;
- end ( seq -- newseq ) { 3 7 } digit ;
- candidates ( -- seq )
front front end front middle end front middle middle end append append append ;
- digits>number ( seq -- n )
<reversed> 0 [ 10^ * + ] reduce-index ;
"The extra primes with up to 4 digits are:" print candidates [ sum prime? ] filter [ digits>number ] [ prime? ] map-filter [ 1 + swap "%2d: %4d\n" printf ] each-index</lang>
- Output:
The extra primes with up to 4 digits are: 1: 2 2: 3 3: 5 4: 7 5: 23 6: 223 7: 227 8: 337 9: 353 10: 373 11: 557 12: 577 13: 733 14: 757 15: 773 16: 2333 17: 2357 18: 2377 19: 2557 20: 2753 21: 2777 22: 3253 23: 3257 24: 3323 25: 3527 26: 3727 27: 5233 28: 5237 29: 5273 30: 5323 31: 5527 32: 7237 33: 7253 34: 7523 35: 7723 36: 7727
Ring
<lang ring> load "stdlib.ring"
limit = 1000 num = 0 for n = 1 to limit
x1 = prime1(n) x2 = prime2(n) if x1 = 1 and x2 = 1 num = num + 1 see "The " + num + "th Extra Prime is: " + n + nl ok
next
func prime1(x)
pstr = string(x) len = len(pstr) count = 0 for n = 1 to len if isprime(number(pstr[n])) count = count + 1 ok next if count = len return 1 else return 0 ok
func prime2(x)
pstr = string(x) len = len(pstr) sum = 0 for n = 1 to len sum = sum + number(pstr[n]) next if isprime(sum) return 1 else return 0 ok
</lang> Output:
The 1th Extra Prime is: 2 The 2th Extra Prime is: 3 The 3th Extra Prime is: 5 The 4th Extra Prime is: 7 The 5th Extra Prime is: 23 The 6th Extra Prime is: 25 The 7th Extra Prime is: 32 The 8th Extra Prime is: 52 The 9th Extra Prime is: 223 The 10th Extra Prime is: 227 The 11th Extra Prime is: 232 The 12th Extra Prime is: 272 The 13th Extra Prime is: 322 The 14th Extra Prime is: 335 The 15th Extra Prime is: 337 The 16th Extra Prime is: 353 The 17th Extra Prime is: 355 The 18th Extra Prime is: 373 The 19th Extra Prime is: 377 The 20th Extra Prime is: 533 The 21th Extra Prime is: 535 The 22th Extra Prime is: 553 The 23th Extra Prime is: 557 The 24th Extra Prime is: 575 The 25th Extra Prime is: 577 The 26th Extra Prime is: 722 The 27th Extra Prime is: 733 The 28th Extra Prime is: 737 The 29th Extra Prime is: 755 The 30th Extra Prime is: 757 The 31th Extra Prime is: 773 The 32th Extra Prime is: 775
Wren
Unsure of the task - see talk page. <lang ecmascript>import "/math" for Int import "/fmt" for Fmt
var digits = [2, 3, 5, 7] // the only digits which are primes var digits2 = [3, 7] // a prime > 5 can't end in 2 or 5 var candidates = [[2, 2], [3, 3], [5, 5], [7, 7]] // [number, sum of its digits]
for (a in digits) {
for (b in digits2) candidates.add([10*a + b, a + b])
}
for (a in digits) {
for (b in digits) { for (c in digits2) candidates.add([100*a + 10*b + c, a + b + c]) }
}
for (a in digits) {
for (b in digits) { for (c in digits) { for (d in digits2) candidates.add([1000*a + 100*b + 10*c + d, a + b + c + d]) } }
}
System.print("The extra primes with up to 4 digits are:") var count = 0 for (cand in candidates) {
if (Int.isPrime(cand[0]) && Int.isPrime(cand[1])) { count = count + 1 Fmt.print("$2d: $4d", count, cand[0]) }
}</lang>
- Output:
The extra primes with up to 4 digits are: 1: 2 2: 3 3: 5 4: 7 5: 23 6: 223 7: 227 8: 337 9: 353 10: 373 11: 557 12: 577 13: 733 14: 757 15: 773 16: 2333 17: 2357 18: 2377 19: 2557 20: 2753 21: 2777 22: 3253 23: 3257 24: 3323 25: 3527 26: 3727 27: 5233 28: 5237 29: 5273 30: 5323 31: 5527 32: 7237 33: 7253 34: 7523 35: 7723 36: 7727