Форум сайта python.su
Опишу все сначала. Под комментарием ‘#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)
Офлайн
НОД - это Наибольший Общий Делитель, я правильно понял? Если да, то НОД можно найти намного проще.
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
Офлайн
Действительно, даже как-то не ловко. Но все же мне интересно, почему моя программа выводит вот такой результат:
Прикреплённый файлы: Фрагмент кода.PNG (5,2 KБ)
Офлайн