为了获得正确的输出,我对github实现做了一些更改,如下所示。在
1.在Python3中,range()不会自动返回一个列表,所以我将它改为list(range(n+1))
2.我做到了int(n/i-i)import math
# return a dict or a list of primes up to N
# create full prime sieve for N=10^6 in 1 sec
def prime_sieve(n, output={}):
nroot = int(math.sqrt(n))
sieve = list(range(n+1))
sieve[1] = 0
for i in range(2, nroot+1):
if sieve[i] != 0:
m = int(n/i - i)
sieve[i*i: n+1:i] = [0] * (m+1)
if type(output) == dict:
pmap = {}
for x in sieve:
if x != 0:
pmap[x] = True
return pmap
elif type(output) == list:
return [x for x in sieve if x != 0]
else:
return None
然后,在下面的函数中,我将默认值设为primelist=None
^{pr2}$
现在,如果你尝试:print(get_prime_factors(140))
得到正确的输出:[(2, 2), (5, 1), (7, 1)]