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}}== |