为了获得正确的输出,我对github实现做了一些更改,如下所示。
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
def get_prime_factors(n, primelist=None):
if primelist is None:
primelist = prime_sieve(n,output=[])
fs = []
for p in primelist:
count = 0
while n % p == 0:
n /= p
count += 1
if count > 0:
fs.append((p, count))
return fs
现在,如果你尝试:
print(get_prime_factors(140))
得到正确的输出:
[(2, 2), (5, 1), (7, 1)]