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 []