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