X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/f6d012dbe0052a24f7970c5a6b053d9e2e7574f6..1e2e275eb4f02a53c28fc7617042dbe72a5ba413:/pock diff --git a/pock b/pock index 2df5fd2..f4aeaa9 100644 --- a/pock +++ b/pock @@ -49,12 +49,8 @@ class ExpectedError (Exception): pass def prod(ff, one = 1): - """ - Return ONE times the product of the elements of FF. - - This is not done very efficiently. - """ - return reduce(lambda prod, f: prod*f, ff, one) + """Return ONE times the product of the elements of FF.""" + return C.MPMul().factor(one).factor(ff).done() def parse_label(line): """ @@ -222,8 +218,10 @@ class Sieve (object): ## Figure out the number of bits in a (nonnegative) primitive `int'. We'll ## use a list of these as our sieve. + try: _MAX = SYS.maxint + except AttributeError: _MAX = SYS.maxsize _NBIT = 15 - while type(1 << (_NBIT + 1)) == int: _NBIT += 1 + while 1 << (_NBIT + 1) < _MAX: _NBIT += 1 def __init__(me, limit): """ @@ -240,8 +238,8 @@ class Sieve (object): me.limit = limit ## Calculate the size of sieve we'll need and initialize the bit list. - n = (limit - 2)/2 - sievesz = (n + me._NBIT - 1)/me._NBIT + n = (limit - 2)//2 + sievesz = (n + me._NBIT - 1)//me._NBIT me._sievemax = sievesz*me._NBIT me._bits = sievesz*[0] @@ -283,7 +281,7 @@ def initsieve(sievebits): global SIEVE if SIEVE is not None: raise ValueError('sieve already defined') if sievebits < 6: sievebits = 6 - SIEVE = Sieve(1 << (sievebits + 1)/2) + SIEVE = Sieve(1 << (sievebits + 1)//2) ###-------------------------------------------------------------------------- ### Primality checking. @@ -607,7 +605,7 @@ def check(pp, line): if p.nbits != nb: raise ExpectedError('check failed: nbits(%s) = %d /= %d' % \ (label, p.nbits, nb)) - if VERBOSITY: print ';; %s = %d [%d]' % (label, p, nb) + if VERBOSITY: print(';; %s = %d [%d]' % (label, p, nb)) def setsievebits(pp, line): """ @@ -900,7 +898,7 @@ def gen(nbits, label = None, p = ProgressReporter()): Give it the LABEL, and report progress to P. """ - if SIEVE.limit >> (nbits + 1)/2: g = gen_small + if SIEVE.limit >> (nbits + 1)//2: g = gen_small else: g = gen_pock return g(nbits, label = label, p = p)