Category talk:Wren-gmp: Difference between revisions
Content added Content deleted
m (→Source code (Wren): Removed a duplicated program comment.) |
m (→Source code (Wren): Removed some surplus whitespace.) |
||
Line 458: | Line 458: | ||
if (m < 2) return Mpz.zero |
if (m < 2) return Mpz.zero |
||
if (m is Num) m = Mpz.from(m) |
if (m is Num) m = Mpz.from(m) |
||
if (m.probPrime(15) > 0) return m.copy() |
if (m.probPrime(15) > 0) return m.copy() |
||
if (m.isSquare) return m.copy().sqrt |
if (m.isSquare) return m.copy().sqrt |
||
for (p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]) { |
for (p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]) { |
||
Line 475: | Line 475: | ||
var factors = [] |
var factors = [] |
||
var k = Mpz.from(37) |
var k = Mpz.from(37) |
||
var i = 0 |
var i = 0 |
||
while (k * k <= n) { |
while (k * k <= n) { |
||
if (n.isDivisible(k)) { |
if (n.isDivisible(k)) { |
||
Line 489: | Line 489: | ||
} |
} |
||
// Private worker method (recursive) to obtain the prime factors of a number (Mpz). |
// Private worker method (recursive) to obtain the prime factors of a number (Mpz). |
||
static primeFactors_(m, trialDivs) { |
static primeFactors_(m, trialDivs) { |
||
if (m.probPrime(15) > 0) return [m.copy()] |
if (m.probPrime(15) > 0) return [m.copy()] |
||
Line 511: | Line 511: | ||
break |
break |
||
} |
} |
||
if (n >= threshold) { |
if (n >= threshold) { |
||
var d = pollardRho_(n, seed, c) |
var d = pollardRho_(n, seed, c) |
||
if (d != 0) { |
if (d != 0) { |
||
Line 528: | Line 528: | ||
checkPrime = false |
checkPrime = false |
||
} |
} |
||
} else if (c < 101) { |
} else if (c < 101) { |
||
c = c + 1 |
c = c + 1 |
||
Line 536: | Line 535: | ||
factors.addAll(primeFactorsWheel_(n)) |
factors.addAll(primeFactorsWheel_(n)) |
||
break |
break |
||
} |
} |
||
} else { |
} else { |
||
factors.addAll(primeFactorsWheel_(n)) |
factors.addAll(primeFactorsWheel_(n)) |
||
Line 547: | Line 546: | ||
// Returns a list of the primes factors (Mpz) of 'm' (an Mpz object or an integral Num) |
// Returns a list of the primes factors (Mpz) of 'm' (an Mpz object or an integral Num) |
||
// using the wheel based factorization and/or Pollard's Rho algorithm as appropriate. |
// using the wheel based factorization and/or Pollard's Rho algorithm as appropriate. |
||
static primeFactors(m) { |
static primeFactors(m) { |
||
if (m < 2) return [] |
if (m < 2) return [] |