Не работает функция вычисления НОД "Пузырьком"

Рейтинг: 0Ответов: 1Опубликовано: 02.02.2023

Основной файл

import supportlib

def multipliers(number, all = None):
    list_multipliers = []
    if all:
        for n in range(1, number + 1):
            if number % n == 0:
                list_multipliers.append(n)
        return list_multipliers
    else:
        n = 2
        while number != 1:
            if number % n == 0:
                list_multipliers.append(n)
                number = number / n
            else:
                n += 1
        return list_multipliers

def lcm(arg):
    if type(arg) == list:
        for n in range(len(arg)):
            arg.insert(n, multipliers(arg.pop(n)))
        while arg.count(1) == len(arg) - 1:
            for tag in range(len(arg) - 1):
                list_mul = []
                for a in range(len(arg[tag])):
                    for b in range(len(arg[tag + 1])):
                        if (arg[tag])[a] == (arg[tag + 1])[b]:
                            list_mul.append((arg[tag])[a])
                arg.pop(tag)
                arg.insert(tag, 1)
                arg.pop(tag + 1)
                arg.insert(tag + 1, list_mul)
        print(arg)
        print(arg[-1])
        return supportlib.mul(arg[-1])

supportlib.py

def mul(list_of_numbers):
    return_number = 1
    for n in range(len(list_of_numbers)):
        return_number = return_number * int(list_of_numbers[n])
    return return_number

Не работает функция lcm(). print(lcm([6, 10, 12])) выводит:

[[2, 3], [2, 5], [2, 2, 3]]
[2, 2, 3]
12

Желаемое поведение:

  1. Получает на вход (пока что) список с int-данными
  2. Каждый int раскладывает на множители и записывает вместо этого int множители в качестве списка
  3. Берёт по очереди n и n + 1 списки из большого списка
  4. n-элемент меняет на единицу, n + 1 элемент меняет на список общих чисел в n и n + 1
  5. Повторяет так со всеми элементами
  6. Перемножает элементы в списке расположенном в конце большого списка

Короче говоря это НОД, сделанный через своеобразный "пузырёк". Но почему-то он не работает.

Ответы

▲ 0Принят

Фух, я доделал этот ужОс. Пользуйтесь на здоровье!

def lcm(arg):
    if type(arg) == list:
        for n in range(len(arg)):
            arg.insert(n, multipliers(arg.pop(n)))
        while arg[-2] != 1:
            for tag in range(len(arg) - 1):
                list_mul = []
                for a in range(len(arg[tag])):
                    for b in range(len(arg[tag + 1])):
                        if (arg[tag])[a] == (arg[tag + 1])[b]:
                            list_mul.append((arg[tag])[a])
                            (arg[tag])[a], (arg[tag + 1])[b] = 1, 1
                arg[tag], arg[tag + 1] = 1, list_mul
        return supportlib.mul(arg[-1])