Category talk:Wren-math: Difference between revisions
Content added Content deleted
(→Source code: Added Int.primePowers method.) |
(→Source code: Added Int.getPrime method.) |
||
Line 485: | Line 485: | ||
n = n - 2 |
n = n - 2 |
||
} |
} |
||
} |
|||
// Returns the 'n'th prime number. For the formula used, see: |
|||
// https://en.wikipedia.org/wiki/Prime_number_theorem#Approximations_for_the_nth_prime_number |
|||
static getPrime(n) { |
|||
if (n < 1 || !n.isInteger) Fiber.abort("Argument must be a positive integer.") |
|||
if (n < 8) return [2, 3, 5, 7, 11, 13, 17][n-1] |
|||
var l1 = n.log |
|||
var l2 = l1.log |
|||
var l3 = (l2 - 2) / l1 |
|||
var l4 = (l2*l2 - 6*l2 + 11) / (2*l1*l1) |
|||
var p = ((l1 + l2 + l3 - l4 - 1) * n).floor |
|||
var g = p.log.round |
|||
var pc = Int.primeCount(p) |
|||
p = p + (n - pc) * g |
|||
if (p % 2 == 0) p = p - 1 |
|||
pc = Int.primeCount(p) |
|||
if (pc < n) { |
|||
for (i in pc...n) p = Int.nextPrime(p) |
|||
} else if (Int.isPrime(p)) { |
|||
for (i in n...pc) p = Int.prevPrime(p) |
|||
} else { |
|||
for (i in n..pc) p = Int.prevPrime(p) |
|||
} |
|||
return p |
|||
} |
} |
||