On Nov 15, 2008, at 23:57 , pong wrote:

> I was a bit reluctant to post this question here since "support"
> shouldn't mean teaching me how to write programs. But Jason Grout
> suggested me to post it here anyway.

It seems reasonable to post this here, since it involves performance,  
which can be tricky in a complicated system like Sage.  I don't think  
this qualifies as "teaching you to program" :-}

> Here is a very short script that I want to maximize the speed
>
> def lspec(n):
>      return sorted([k if k^2 < 2*n else 2*n/k for k in divisors
> (odd_part(n))])
>
> At first, I think I can make it faster by avoiding computing k^2 in
> the for loop by replacing k^2 > 2*n  by
> k > r where r = sqrt(RDF(2*n)) is computed once outside the for loop.
> However, it looks like comparing two entities of different types is
> very slow in SAGE so I ended up with a slower script if a do that.

I assume you mean "<" instead of ">" (or vice versa in your script).

Try using isqrt() to compute the integer part of the square root.  It  
speeds up the loop, but only slightly:

sage: timeit(" lspec(2799734567890)")
625 loops, best of 3: 1.24 ms per loop
sage: timeit(" sspec(2799734567890)")
625 loops, best of 3: 1.13 ms per loop

(This is on a 3GHz Dual Quad Xeon, so YMMV).  sspec() is the version  
with the square root computed outside the loop.

HTH

Justin

--
Justin C. Walker, Curmudgeon-At-Large
Institute for the Enhancement of the Director's Income
--------
Experience is what you get
   when you don't get what you want.
--------




--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to