Extra primes: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: optimized the generation of primes and "extra" primes, added some counts for increasing limit magnitudes.)
Line 1,022: Line 1,022:
7727
7727
</pre>
</pre>

=={{header|Kotlin}}==
{{trans|Java}}
<lang scala>private fun nextPrimeDigitNumber(n: Int): Int {
return if (n == 0) {
2
} else when (n % 10) {
2 -> n + 1
3, 5 -> n + 2
else -> 2 + nextPrimeDigitNumber(n / 10) * 10
}
}

private fun isPrime(n: Int): Boolean {
if (n < 2) {
return false
}
if (n and 1 == 0) {
return n == 2
}
if (n % 3 == 0) {
return n == 3
}
if (n % 5 == 0) {
return n == 5
}
val wheel = intArrayOf(4, 2, 4, 2, 4, 6, 2, 6)
var p = 7
while (true) {
for (w in wheel) {
if (p * p > n) {
return true
}
if (n % p == 0) {
return false
}
p += w
}
}
}

private fun digitSum(n: Int): Int {
var nn = n
var sum = 0
while (nn > 0) {
sum += nn % 10
nn /= 10
}
return sum
}

fun main() {
val limit = 10000
var p = 0
var n = 0
println("Extra primes under $limit:")
while (p < limit) {
p = nextPrimeDigitNumber(p)
if (isPrime(p) && isPrime(digitSum(p))) {
n++
println("%2d: %d".format(n, p))
}
}
println()
}</lang>
{{out}}
<pre>Extra primes under 10000:
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</pre>


=={{header|MAD}}==
=={{header|MAD}}==