Как найти кратность правильного фактора с большой эффективностью? - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь написать код, чтобы узнать, является ли данный номер подходящим фактором n или нет, а также я пытаюсь выяснить кратность данного числа.

Здесьмой код:

def f(n, d):
    '''
    >>> f(2, 1)
    1 is not a proper factor of 2.
    >>> f(2, 2)
    2 is not a proper factor of 2.
    >>> f(16, 2)
    2 is a proper factor of 16 of mutiplicity 4.
    >>> f(100, 20)
    20 is a proper factor of 100 of mutiplicity 1.
    >>> f(8 ** 7 * 3 ** 5 * 11 ** 2, 8)
    8 is a proper factor of 61662560256 of mutiplicity 7.
    >>> f(3 ** 3 * 11 * 13 ** 2 * 40 ** 6, 8)
    8 is a proper factor of 205590528000000 of mutiplicity 6.
    '''
    multiplicity = 0
    # Insert your code here
    if d == 1:
        print(f'{d} is not a proper factor of {n}.')
    if d == n:
        print(f'{d} is not a proper factor of {n}.')
    if n % d == 0:
        copy = n
        while(copy != 1):
            copy = copy // d
            multiplicity += 1
    if not multiplicity:
        print(f'{d} is not a proper factor of {n}.')
    else:
        print(f'{d} is a proper factor of {n} of mutiplicity {multiplicity}.')


if __name__ == '__main__':
    import doctest
    doctest.testmod()

Любые предложения будут очень полезны.

1 Ответ

0 голосов
/ 03 декабря 2018

Если я правильно понимаю, что вы пытаетесь сделать, я считаю, что этот цикл имеет неправильное условие

while(copy != 1):
    copy = copy // d
    multiplicity += 1

То, что вы хотите, это разделить копию на d, если копия кратна dт.е.

while(copy % d == 0):
    copy = copy / d
    multiplicity += 1
...