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-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 |
|||
⚫ | |||
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=== |
|||
⚫ | |||
⚫ | |||
<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) { |
||
if (p.probPrime(15) > 0) return k |
|||
p.sub(two) |
|||
k = k + 2 |
k = k + 2 |
||
} |
} |