tag:blogger.com,1999:blog-1693014329567144872.post907004120363011057..comments2023-08-27T06:49:20.658+01:00Comments on The Glowing Python: Prime factor decomposition of a numberJustGlowinghttp://www.blogger.com/profile/17212021288715206641noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-1693014329567144872.post-24701154859011928942012-12-20T16:42:34.202+00:002012-12-20T16:42:34.202+00:00Also works on '15' and other numbers when ...Also works on '15' and other numbers when the 'while' statement is changed to:<br /><br />while n/float(i) == floor(n/float(i)): # is n/i an integer?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1693014329567144872.post-88622693913689172742012-12-08T06:47:44.929+00:002012-12-08T06:47:44.929+00:00Works on 90, but when I call factors(15) it return...Works on 90, but when I call factors(15) it returns None, instead of [3, 5]. Seems to work on many numbers, but not all.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1693014329567144872.post-516816923120960602011-08-11T23:51:36.117+01:002011-08-11T23:51:36.117+01:00Bah, looks like comments on blogspot can't use...Bah, looks like comments on blogspot can't use pre tags,<br /><br />I made a gist <a href="https://gist.github.com/1141000" rel="nofollow">here</a>Alemihttps://www.blogger.com/profile/15394732652049740436noreply@blogger.comtag:blogger.com,1999:blog-1693014329567144872.post-42193571365579022012011-08-11T21:01:54.827+01:002011-08-11T21:01:54.827+01:00from itertools import chain
def factors2(n):
...from itertools import chain<br /><br />def factors2(n):<br /> result = []<br /> # test 2 and all of the odd numbers<br /> # xrange instead of range avoids constructing the list<br /> for i in chain([2],xrange(3,n+1,2)):<br /> s = 0<br /> while n%i == 0: #a good place for mod<br /> n /= i<br /> s += 1<br /> result.extend([i]*s) #avoid another for loop<br /> if n==1:<br /> return result<br /><br />Results in a bit of a speedup<br /><br />In [2]: timeit factors(1234567)<br />1 loops, best of 3: 674 ms per loop<br /><br />In [3]: timeit factors2(1234567)<br />1000 loops, best of 3: 1.69 ms per loopAlemihttps://www.blogger.com/profile/15394732652049740436noreply@blogger.com