Both run instantaneously for me. This is a well-studied function (see proper_divisors_sum2(n)), so there is probably a more efficient way to compute it. Anyway, you should note that the answer for 2**k is always 2**k - 1.
Aaron Meurer On Thu, Nov 11, 2010 at 8:45 PM, smichr <[email protected]> wrote: > I've been discussing a problem with someone on the tutor list. It has > to do with computing the sum of the proper divisors of a number. I > suggested that he check out the sympy ntheory module. He did and is > getting dismal results that are very different from mine. Does anyone > have an idea what the problem might be? It's really a garden variety > problem. Should be too difficult. On my system the following tests are > both almost instantaneous but for him, use of sympy took about 1 > minute. Any ideas why that might be? He has downloaded the most recent > sympy and python 2.6. Details about his system are referenced at the > end of this post. > > > Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit >> (Intel)] >> Type "help", "copyright", "credits" or "license" for more information. >>>>> from sympy import divisors >>>>> >> def proper_divisors_sum1(n): >> pd = set((1,)) >> for x in xrange(2, int(n**.5)+1): >> if n % x == 0: >> pd.update((x, n//x)) >> return sum(pd) >>>>> n = 2**29 >>>>> proper_divisors_sum1(n) >> 536870911 >>>>> >> def proper_divisors_sum2(n): >> return sum(list(divisors(n)))-n >>>>> proper_divisors_sum2(n) >> 536870911 >>>>> >> >> with n = 2**29, >> proper_divisors_sum1(n) was apparently instantantaneous >> proper_divisors_sum2(n) took ~59 secs. > >> laptop information: http://tutoree7.pastebin.com/AXEigSLq > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
