Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2017 19:28:36

Edward
Зарегистрирован: 2017-02-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

НОД 2-х чисел.

Опишу все сначала. Под комментарием ‘#Extra’ написан код, выполняющий “каноническое разложение составного числа” на множители. Списки ‘B’ и ‘C’ содержат соответственно множители. Под комментарием ‘#Main’ находится часть о которой и идет речь. В ней получается НОД (пересечение 2-х списков.). Оно происходит так: перебираются элементы списка ‘B’, и если элемент есть в списке ‘C’, элементы удаляются из списков и удаленный элемент добавляется в список ‘F’. Вроде все должно работать нормально, но это происходит только в некоторых случаях. Есть случаи, когда работа главной части “недоделана”. Прошу помощи: В чем ошибка и как можно ее исправить?

 n = int(input())
n1 = int(input())
#Extra
def gg(n):
    (q,q2) = ('True','True')
    A = []
    f = int(n)
    while q2 == 'True':
        while q == 'True':
            for i in range(2, f + 1):
                if i == f:
                    A.append('')
                    A.append(i)
                    q = 'False'
                    break
                elif f%i ==0:
                    f = int(f/i)
                    A.append(i)
                    q = 'False'
                    break
        if '' in A:
            q2 = 'False'
        elif '' not in A:
            q = 'True'
    global A
    return A
gg(n)
B = A
gg(n1)
C = A
F = []
del B[-2]
del C[-2]
print(B)
print(C)
#Main
for i in C:
    if i in B:
        B.remove(i)
        C.remove(i)
        F.append(i)
    
            
print(B)
print(C)
print(F)

Отредактировано Edward (Фев. 23, 2017 19:42:47)

Офлайн

#2 Фев. 23, 2017 21:14:32

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

НОД 2-х чисел.

НОД - это Наибольший Общий Делитель, я правильно понял? Если да, то НОД можно найти намного проще.

 def nod(num1, num2):
    #  Определим наименьшее из двух чисел num1 и num2
    min = num1 if num1 < num2 else num2
    #  Единица всегда является общим делителем для всех целых чисел
    largestFactor = 1
    for i in range(1, min + 1):
        if num1 % i == 0 and num2 % i == 0:
        largestFactor = i   # Найден НОД
    return largestFactor

Офлайн

#3 Фев. 23, 2017 21:31:56

Edward
Зарегистрирован: 2017-02-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

НОД 2-х чисел.

Действительно, даже как-то не ловко. Но все же мне интересно, почему моя программа выводит вот такой результат:

Прикреплённый файлы:
attachment Фрагмент кода.PNG (5,2 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version