Если присваивание не вернуло значения, строка a = b = c = 16
тоже не работала.
Также возможно иногда использовать такие вещи, как while ((s = readLine()) != null)
.
Таким образом, причина того, что присвоение присваивания возвращает назначенное значение, заключается в том, чтобы позволить вам делать это.
Я внес некоторые изменения в реализацию github для получения правильного вывода, как показано ниже.
1. В Python 3 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
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)]