Python: Как мне найти основные факторы очень большого числа? [Дубликат]

Если присваивание не вернуло значения, строка a = b = c = 16 тоже не работала.

Также возможно иногда использовать такие вещи, как while ((s = readLine()) != null).

Таким образом, причина того, что присвоение присваивания возвращает назначенное значение, заключается в том, чтобы позволить вам делать это.

0
задан Maqruis1 18 January 2019 в 11:16
поделиться

1 ответ

Я внес некоторые изменения в реализацию 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)]
0
ответ дан gireesh4manu 18 January 2019 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: