Category talk:Wren-long: Difference between revisions

→‎Source code: Added a second divisors method.
(→‎Source code: Added divisors and properDivisors methods to ULong.)
(→‎Source code: Added a second divisors method.)
Line 913:
// Returns all the divisors of 'n' including 1 and 'n' itself.
static divisors(n) {
if (n < 1) return []
if (n is Num) n = ULong.new(n)
var divs = []
var divs2 = []
var i = one
var k = (n.isEven) ? one : two
var sqrt = n.isqrt
while (i <= sqrt) {
if (n.isDivisibleBy(i)) {
divs.add(i)
var j = n / i
if (j != i) divs2.add(j)
}
i = i + k
}
if (!divs2.isEmpty) divs = divs + divs2[-1..0]
return divs
}
 
// Returns all the divisors of 'n' excluding 'n'.
static properDivisors(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 == ULong.zero) return []
var factors = ULong.primeFactors(n)
Line 929 ⟶ 958:
}
 
// ReturnsAs all'properDivisors' thebut divisors ofuses 'ndivisors2' excludingmethod. 'n'.
static properDivisorsproperDivisors2(n) {
var d = divisorsdivisors2(n)
var c = d.count
return (c <= 1) ? [] : d[0..-2]
9,476

edits