Category talk:Wren-math: Difference between revisions
Content added Content deleted
m (→Source code: Added quotes to 'lang' attribute.) |
(→Source code: Added a second 'divisors' method which is quicker for large numbers with a small number of prime factors.) |
||
Line 416: | Line 416: | ||
static properDivisors(n) { |
static properDivisors(n) { |
||
var d = divisors(n) |
var d = divisors(n) |
||
var c = d.count |
|||
return (c <= 1) ? [] : d[0..-2] |
|||
} |
|||
// As 'divisors' method but uses a different algorithm. |
|||
// Better for large numbers with a small number of prime factors. |
|||
static divisors2(n) { |
|||
if (n <= 0) return [] |
|||
var factors = Int.primeFactors(n) |
|||
var divs = [1] |
|||
for (p in factors) { |
|||
for (i in 0...divs.count) divs.add(divs[i]*p) |
|||
} |
|||
divs.sort() |
|||
var c = divs.count |
|||
if (c > 1) { |
|||
for (i in c-1..1) { |
|||
if (divs[i-1] == divs[i]) divs.removeAt(i) |
|||
} |
|||
} |
|||
return divs |
|||
} |
|||
// As 'properDivisors' but uses 'divisors2' method. |
|||
static properDivisors2(n) { |
|||
var d = divisors2(n) |
|||
var c = d.count |
var c = d.count |
||
return (c <= 1) ? [] : d[0..-2] |
return (c <= 1) ? [] : d[0..-2] |