Yeah, the divisors function otherwise kicks proverbial:

Here in Sage (excuse my rubbish python):

def random(n):
    a = ZZ.random_element(n)
    return a

def z_divisors_test(m):
    for j in range(0, m) :
        n = random(10)
        z = 1
        c = 1
        for i in range(0, n):
            k = random(100).next_prime()
            if gcd(k, z) == 1 :
                e = random(8)
                c = c*(e+1)
                z = z*(k^e)
        l = z.divisors()
        if len(l) != c:
            print "Error", len(l), "!=", c, "for integer", z

time z_divisors_test(2000)

Something like 40s.

Here in Magma (excuse my even more rubbish Magma coding skills):

t:= Cputime();
for j := 0 to 2000 do
n := Random(10);
z:=1;
c:=1;
for i := 0 to n do
k := NextPrime(Random(100));
if Gcd(k,z) eq 1 then
e := Random(8);
c := c*(e+1);
z := z*(k^e);
end if;
end for;
l := Divisors(z);
if #l ne c then
print "Error";
end if;
end for;
Cputime(t);

Umm, yeah. Not worth waiting up for. :-)

Magma does use half the memory though.

Bill.

On 8 Apr, 06:44, Robert Bradshaw <rober...@math.washington.edu> wrote:
> On Apr 7, 2009, at 10:26 PM, Bill Hart wrote:
>
>
>
> > William didn't mention the context of this, which is that for small
> > integers most of the time taken by the divisors method in ZZ is taken
> > up with factoring. It seems much more likely people will use small
> > numbers as inputs to this, so this is a shame, given the amount of
> > work that (I hear) went into optimising that in Sage.
>
> > Bill.
>
> Hmm.. that's not always true, at least the cases that inspired this  
> ticket:
>
> sage: n = ZZ(odd_part(factorial(31)))
> sage: timeit('n.factor()')
> 625 loops, best of 3: 294 µs per loop
> sage: timeit('n.divisors()')
> 5 loops, best of 3: 104 ms per loop
>
> So for some highly composite numbers, factoring is the minority of  
> the time. (BTW, before the optimization, this took nearly 2.5  
> seconds!) Of course usually for numbers of this size there are only a  
> few factors, so the divisors function is dominated by the much harder  
> problem of factoring (which can clearly use some fixing).
>
> - Robert
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to