Ormiston triples: Difference between revisions
Content added Content deleted
(Created a new draft task and added a Wren example) |
m (→{{header|Wren}}: Minor changes to output.) |
||
Line 61: | Line 61: | ||
} |
} |
||
counts.add(count) |
counts.add(count) |
||
System.print(" |
System.print("Smallest members of first 25 Ormiston triples:") |
||
Fmt.tprint("$,10d ", orm25, 5) |
Fmt.tprint("$,10d ", orm25, 5) |
||
System.print() |
System.print() |
||
j = 1e9 |
j = 1e9 |
||
for (i in 0...counts.count) { |
for (i in 0...counts.count) { |
||
Fmt.print("$,d Ormiston |
Fmt.print("$,d Ormiston triples before $,d", counts[i], j) |
||
j = j * 10 |
j = j * 10 |
||
System.print() |
System.print() |
||
Line 73: | Line 73: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
Smallest members of first 25 Ormiston triples: |
|||
11,117,123 12,980,783 14,964,017 32,638,213 32,964,341 |
11,117,123 12,980,783 14,964,017 32,638,213 32,964,341 |
||
33,539,783 35,868,013 44,058,013 46,103,237 48,015,013 |
33,539,783 35,868,013 44,058,013 46,103,237 48,015,013 |
||
Line 80: | Line 80: | ||
82,324,237 82,523,017 83,279,783 86,050,781 92,514,341 |
82,324,237 82,523,017 83,279,783 86,050,781 92,514,341 |
||
368 Ormiston |
368 Ormiston triples before 1,000,000,000 |
||
4,925 Ormiston |
4,925 Ormiston triples before 10,000,000,000 |
||
</pre> |
</pre> |
Revision as of 15:58, 2 February 2023
Ormiston triples is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
- Definition
An Ormiston triple is three consecutive prime numbers which are anagrams, i.e. contain the same decimal digits but in a different order.
- Example
The three consecutive primes (11117123, 11117213, 11117321) are an Ormiston triple.
- Task
- Find and show the smallest member of the first 25 Ormiston triples.
- Find and show the count of Ormiston triples up to one billion.
- Stretch
- Find and show the count of Ormiston triples up to ten billion.
- Reference
- Related task
Wren
This uses a segmented sieve to get up to 10 billion without running out of memory (bools in Wren require 8 bytes rather than one) and takes just over 13 minutes to achieve the stretch goal.
Limiting the search to a billion, takes about 73 seconds (68 seconds using our 'standard' sieve).
import "./math" for Int
import "./fmt" for Fmt
var limit = 1e10
var primes = Int.segmentedSieve(limit, 8)
var orm25 = []
var j = 1e9
var count = 0
var counts = []
for (i in 0...primes.count-2) {
var p1 = primes[i]
var p2 = primes[i+1]
var p3 = primes[i+2]
if ((p2 - p1) % 18 != 0 || (p3 - p2) % 18 != 0) continue
var key1 = 1
for (dig in Int.digits(p1)) key1 = key1 * primes[dig]
var key2 = 1
for (dig in Int.digits(p2)) key2 = key2 * primes[dig]
if (key1 != key2) continue
var key3 = 1
for (dig in Int.digits(p3)) key3 = key3 * primes[dig]
if (key2 == key3) {
if (count < 25) orm25.add(p1)
if (p1 >= j) {
counts.add(count)
j = j * 10
}
count = count + 1
}
}
counts.add(count)
System.print("Smallest members of first 25 Ormiston triples:")
Fmt.tprint("$,10d ", orm25, 5)
System.print()
j = 1e9
for (i in 0...counts.count) {
Fmt.print("$,d Ormiston triples before $,d", counts[i], j)
j = j * 10
System.print()
}
- Output:
Smallest members of first 25 Ormiston triples: 11,117,123 12,980,783 14,964,017 32,638,213 32,964,341 33,539,783 35,868,013 44,058,013 46,103,237 48,015,013 50,324,237 52,402,783 58,005,239 60,601,237 61,395,239 74,699,789 76,012,879 78,163,123 80,905,879 81,966,341 82,324,237 82,523,017 83,279,783 86,050,781 92,514,341 368 Ormiston triples before 1,000,000,000 4,925 Ormiston triples before 10,000,000,000