Jump to content

Ultra useful primes: Difference between revisions

→‎{{header|Wren}}: Added a CLI version and marginal improvement for embedded version.
(→‎{{header|Wren}}: Added a CLI version and marginal improvement for embedded version.)
Line 112:
 
=={{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.5 seconds to get to n = 13 but 7 minutes 1510 seconds to reach n = 14. I didn't bother after that.
<lang ecmascript>import "./gmp" for Mpz
import "./fmt" for Fmt
 
var one = Mpz.one
var two = Mpz.two
 
var a = Fn.new { |n|
var p = Mpz.one.lsh(1 << n).sub(one)
var k = 1
while (true) {
varif q(p.probPrime(15) => p0) -return k
if (qp.probPrimesub(15) > 0two) return k
k = k + 2
}
9,490

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.