Ormiston triples: Difference between revisions

From Rosetta Code
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("First 25 Ormiston prime triples:")
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 prime triples before $,d", counts[i], j)
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>
First 25 Ormiston prime triples:
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 prime triples before 1,000,000,000
368 Ormiston triples before 1,000,000,000


4,925 Ormiston prime triples before 10,000,000,000
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

Library: Wren-math
Library: Wren-fmt

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