Ormiston pairs: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (→{{header|Raku}}: Add a label) |
(Added Wren) |
||
Line 52: | Line 52: | ||
382 Ormiston pairs before one million |
382 Ormiston pairs before one million |
||
3722 Ormiston pairs before ten million</pre> |
3722 Ormiston pairs before ten million</pre> |
||
=={{header|Wren}}== |
|||
{{libheader|Wren-math}} |
|||
{{libheader|Wren-seq}} |
|||
{{libheader|Wren-fmt}} |
|||
<syntaxhighlight lang="ecmascript">import "./math" for Int |
|||
import "./seq" for Lst |
|||
import "./fmt" for Fmt |
|||
var limit = 1e7 |
|||
var primes = Int.primeSieve(limit) |
|||
var orm30 = [] |
|||
var i = 0 |
|||
var j = 1e5 |
|||
var count = 0 |
|||
var counts = [] |
|||
while (i < primes.count-1) { |
|||
var p1 = primes[i] |
|||
var p2 = primes[i+1] |
|||
var d1 = Int.digits(p1) |
|||
var d2 = Int.digits(p2) |
|||
if (Lst.areEqual(d1.sort(), d2.sort())) { |
|||
if (count < 30) orm30.add([p1, p2]) |
|||
if (p1 >= j) { |
|||
counts.add(count) |
|||
j = j * 10 |
|||
} |
|||
count = count + 1 |
|||
i = i + 2 |
|||
} else { |
|||
i = i + 1 |
|||
} |
|||
} |
|||
counts.add(count) |
|||
System.print("First 30 Ormiston pairs:") |
|||
Fmt.tprint("[$,6d] ", orm30, 3) |
|||
Fmt.print("\n$,d Ormiston pairs before 100,000", counts[0]) |
|||
Fmt.print("$,d Ormiston pairs before 1,000,000", counts[1]) |
|||
Fmt.print("$,d Ormiston pairs before 10,000,000", counts[2])</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
First 30 Ormiston pairs: |
|||
[ 1,913 1,931] [18,379 18,397] [19,013 19,031] |
|||
[25,013 25,031] [34,613 34,631] [35,617 35,671] |
|||
[35,879 35,897] [36,979 36,997] [37,379 37,397] |
|||
[37,813 37,831] [40,013 40,031] [40,213 40,231] |
|||
[40,639 40,693] [45,613 45,631] [48,091 48,109] |
|||
[49,279 49,297] [51,613 51,631] [55,313 55,331] |
|||
[56,179 56,197] [56,713 56,731] [58,613 58,631] |
|||
[63,079 63,097] [63,179 63,197] [64,091 64,109] |
|||
[65,479 65,497] [66,413 66,431] [74,779 74,797] |
|||
[75,913 75,931] [76,213 76,231] [76,579 76,597] |
|||
40 Ormiston pairs before 100,000 |
|||
382 Ormiston pairs before 1,000,000 |
|||
3,722 Ormiston pairs before 10,000,000 |
|||
</pre> |
Revision as of 20:35, 29 January 2023
Ormiston pairs 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.
An Ormiston pair is two consecutive prime numbers which are anagrams, i.e. contain the same decimal digits but in a different order.
(1913, 1931) is the first such pair.
- Task
- Find and show the first 30 Ormiston pairs.
- Find and show the count of Ormiston pairs up to one million.
- Stretch
- Find and show the count of Ormiston pairs up to ten million.
- See also
Raku
use Lingua::EN::Numbers;
use List::Divvy;
my @primes = lazy (^∞).hyper.grep: &is-prime;
my @Ormistons = @primes.kv.map: { ($^value, @primes[$^key+1]) if $^value.comb.Bag eqv @primes[$^key+1].comb.Bag };
say "First thirty Ormiston pairs:";
say @Ormistons[^30].batch(3)».map( { "({.[0].fmt: "%5d"}, {.[1].fmt: "%5d"})" } ).join: "\n";
say '';
say +@Ormistons.&before( *[1] > $_ ) ~ " Ormiston pairs before " ~ .Int.&cardinal for 1e5, 1e6, 1e7;
- Output:
First thirty Ormiston pairs: ( 1913, 1931) (18379, 18397) (19013, 19031) (25013, 25031) (34613, 34631) (35617, 35671) (35879, 35897) (36979, 36997) (37379, 37397) (37813, 37831) (40013, 40031) (40213, 40231) (40639, 40693) (45613, 45631) (48091, 48109) (49279, 49297) (51613, 51631) (55313, 55331) (56179, 56197) (56713, 56731) (58613, 58631) (63079, 63097) (63179, 63197) (64091, 64109) (65479, 65497) (66413, 66431) (74779, 74797) (75913, 75931) (76213, 76231) (76579, 76597) 40 Ormiston pairs before one hundred thousand 382 Ormiston pairs before one million 3722 Ormiston pairs before ten million
Wren
import "./math" for Int
import "./seq" for Lst
import "./fmt" for Fmt
var limit = 1e7
var primes = Int.primeSieve(limit)
var orm30 = []
var i = 0
var j = 1e5
var count = 0
var counts = []
while (i < primes.count-1) {
var p1 = primes[i]
var p2 = primes[i+1]
var d1 = Int.digits(p1)
var d2 = Int.digits(p2)
if (Lst.areEqual(d1.sort(), d2.sort())) {
if (count < 30) orm30.add([p1, p2])
if (p1 >= j) {
counts.add(count)
j = j * 10
}
count = count + 1
i = i + 2
} else {
i = i + 1
}
}
counts.add(count)
System.print("First 30 Ormiston pairs:")
Fmt.tprint("[$,6d] ", orm30, 3)
Fmt.print("\n$,d Ormiston pairs before 100,000", counts[0])
Fmt.print("$,d Ormiston pairs before 1,000,000", counts[1])
Fmt.print("$,d Ormiston pairs before 10,000,000", counts[2])
- Output:
First 30 Ormiston pairs: [ 1,913 1,931] [18,379 18,397] [19,013 19,031] [25,013 25,031] [34,613 34,631] [35,617 35,671] [35,879 35,897] [36,979 36,997] [37,379 37,397] [37,813 37,831] [40,013 40,031] [40,213 40,231] [40,639 40,693] [45,613 45,631] [48,091 48,109] [49,279 49,297] [51,613 51,631] [55,313 55,331] [56,179 56,197] [56,713 56,731] [58,613 58,631] [63,079 63,097] [63,179 63,197] [64,091 64,109] [65,479 65,497] [66,413 66,431] [74,779 74,797] [75,913 75,931] [76,213 76,231] [76,579 76,597] 40 Ormiston pairs before 100,000 382 Ormiston pairs before 1,000,000 3,722 Ormiston pairs before 10,000,000