How to get decimal form of largest known prime?
Duncan Booth
me at privacy.net
Fri Jun 11 09:24:10 EDT 2004
More information about the Python-list mailing list
Fri Jun 11 09:24:10 EDT 2004
- Previous message (by thread): How to get decimal form of largest known prime?
- Next message (by thread): How to get decimal form of largest known prime?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Rick Holbert <holbertr at dma.org> wrote in news:cac91i$5st$1 at charm.magnus.acs.ohio-state.edu: > So, something like this? > > x = 2**2436583 - 1 > > while x > 0: > print x%10, > x/=10 > If you want to convert a large number to a decimal string reasonably quickly you should do the conversion recursively and divide by numbers much larger than 10. For example, the code below will outperform str(x) significantly for numbers larger than about 2**10000 (according to timeit.py) and has plenty of scope for further optimisation. It will still take a very long time for 2**24036583 - 1: I haven't timed it, but even precalculating the powers list grinds to a halt beyond about 17 or 18 elements. def toDecimal(x): digits = 48 powers = [ 10**digits ] result = [] format = "%%0%dd" % (2*digits) while x > powers[-1]: powers.append( 10 ** (digits * 2**len(powers))) def convert(x, index): if x==0: if not result: return # Ignore leading zeros result.append('0' * (digits * 2**(index+1))) return if index > 0: q, r = divmod(x, powers[index]) convert(q, index-1) convert(r, index-1) else: result.append(format % x) if x==0: return '0' convert(x, len(powers)-1) result[0] = result[0].lstrip('0') return ''.join(result) Notes: the value used for 'digits' is critical. Multiples of 12 seem to work best for me with 24, 48 or 96 being about best. The calculation of powers should be done once and cached (preferably outside the program), but it is still a bottleneck when they get sufficiently large. Squaring the last element of powers each time is an alternative way to calculate it but doesn't seem to be any faster.
- Previous message (by thread): How to get decimal form of largest known prime?
- Next message (by thread): How to get decimal form of largest known prime?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list