Ultra useful primes: Difference between revisions

Content added Content deleted
(→‎{{header|Wren}}: Added a CLI version and marginal improvement for embedded version.)
Line 112: Line 112:


=={{header|Wren}}==
=={{header|Wren}}==
===CLI===
{{libheader|Wren-gmp}}
{{libheader|Wren-big}}
An embedded version as Wren-CLI (with BigInt) will be very slow for this task.
{{libheader|Wren-fmt}}
Manages to find the first ten but takes 84 seconds to do so.
<lang ecmascript>import "./big" for BigInt
import "./fmt" for Fmt


var one = BigInt.one
The following takes about 17.5 seconds to get to n = 13 but 7 minutes 15 seconds to reach n = 14. I didn't bother after that.
var two = BigInt.two

var a = Fn.new { |n|
var p = (BigInt.one << (1 << n)) - one
var k = 1
while (true) {
if (p.isProbablePrime(5)) return k
p = p - two
k = k + 2
}
}

System.print(" n k")
System.print("----------")
for (n in 1..10) Fmt.print("$2d $d", n, a.call(n))</lang>

{{out}}
<pre>
n k
----------
1 1
2 3
3 5
4 15
5 5
6 59
7 159
8 189
9 569
10 105
</pre>
===Embedded===
{{libheader|Wren-gmp}}
The following takes about 17 seconds to get to n = 13 but 7 minutes 10 seconds to reach n = 14. I didn't bother after that.
<lang ecmascript>import "./gmp" for Mpz
<lang ecmascript>import "./gmp" for Mpz
import "./fmt" for Fmt
import "./fmt" for Fmt

var one = Mpz.one
var two = Mpz.two


var a = Fn.new { |n|
var a = Fn.new { |n|
var p = Mpz.one.lsh(1 << n)
var p = Mpz.one.lsh(1 << n).sub(one)
var k = 1
var k = 1
while (true) {
while (true) {
var q = p - k
if (p.probPrime(15) > 0) return k
if (q.probPrime(15) > 0) return k
p.sub(two)
k = k + 2
k = k + 2
}
}