One-two primes: Difference between revisions

Content added Content deleted
(J draft)
(Added Wren)
Line 100: Line 100:
1900: (1 x 1889) 22212212211
1900: (1 x 1889) 22212212211
2000: (1 x 1989) 22121121211</pre>
2000: (1 x 1989) 22121121211</pre>

=={{header|Wren}}==
{{libheader|Wren-gmp}}
{{libheader|Wren-fmt}}
{{libheader|Wren-iterate}}
This is based on the Python code in the OEIS entry. Run time about 52 seconds.
<syntaxhighlight lang="ecmascript">import "./gmp" for Mpz
import "./fmt" for Fmt
import "./iterate" for Stepped

var firstOneTwo = Fn.new { |n|
var k = Mpz.ten.pow(n).sub(Mpz.one).div(Mpz.nine)
var r = Mpz.one.lsh(n).sub(Mpz.one)
var m = Mpz.zero
while (m <= r) {
var t = k + Mpz.fromStr(m.toString(2))
if (t.probPrime(15) > 0) return t
m.inc
}
return Mpz.minusOne
}

for (n in 1..20) Fmt.print("$4d: $i", n, firstOneTwo.call(n))
for (n in Stepped.new(100..2000, 100)) {
var t = firstOneTwo.call(n)
if (t == Mpz.minusOne) {
System.print("No %(n)-digit prime found with only digits 1 or 2.")
} else {
var ts = t.toString
var ix = ts.indexOf("2")
Fmt.print("$4d: (1 x $4d) $s", n, ix, ts[ix..-1])
}
}</syntaxhighlight>

{{out}}
<pre>
1: 2
2: 11
3: 211
4: 2111
5: 12211
6: 111121
7: 1111211
8: 11221211
9: 111112121
10: 1111111121
11: 11111121121
12: 111111211111
13: 1111111121221
14: 11111111112221
15: 111111112111121
16: 1111111112122111
17: 11111111111112121
18: 111111111111112111
19: 1111111111111111111
20: 11111111111111212121
100: (1 x 92) 21112211
200: (1 x 192) 21112211
300: (1 x 288) 211121112221
400: (1 x 390) 2111122121
500: (1 x 488) 221222111111
600: (1 x 590) 2112222221
700: (1 x 689) 21111111111
800: (1 x 787) 2122222221111
900: (1 x 891) 222221221
1000: (1 x 988) 222122111121
1100: (1 x 1087) 2112111121111
1200: (1 x 1191) 211222211
1300: (1 x 1289) 22121221121
1400: (1 x 1388) 222211222121
1500: (1 x 1489) 21112121121
1600: (1 x 1587) 2121222122111
1700: (1 x 1688) 212121211121
1800: (1 x 1791) 221211121
1900: (1 x 1889) 22212212211
2000: (1 x 1989) 22121121211
</pre>