2015-09-10 3 views
2

мне нужно, чтобы получить наибольший общий делитель 2 числа, используя их факторизации факторизации будут выставлены в счетчикахНОД из 2 факторизации списков с помощью счетчиков питона

c=Counter(factorslist(a)) 
d=Counter(factorslist(b)) 

Поэтому я хочу, чтобы добавить списки вместе, как

g=c and d 

, а затем мой умножая, что находится внутри счетчика друг другом, я должен быть в состоянии получить НОД, так что если г является (2,2,3,8) я хочу, чтобы вычислить 2*2*3*8.

У меня много проблем, есть ли функция счетчика, которая делает это? или мне нужен цикл для систематического разбора каждого числа вместе? мне нужно преобразовать его в настройки или что-то в первую очередь?

UPDATE: хорошо так, что ив сделал добавляют их вместе с помощью г = с & д ковшики тонкой теперь им пытаются получить мой алгоритм работает золь = 1 для г в диапазоне (MAXg + 1): если g [i]! = 0: k = g [i] sol = sol * (i k) Обратный золь поэтому я проверяю, сколько из каждого числа указано в списке общих факторов g и умножив число на их число, а затем умножение золя на то, что, например, пять двух, это sol = sol (5 * 2). это, похоже, работает с числами с низким gcds около 30 и меньше, я думаю? и он работает для совместного использования, но если я запустил это, скажем, 1000 500, я получу 60 назад ... даже 1000 и 990 дают мне 10 назад.

ответ

1

Во-первых, я думаю, вы поняли несколько вещей: (1) факторизация на простые множители - 8 будут учтены в 2 * 2 * 2 (2) Счетчик не список; это словарь. Список [2, 2, 3, 7] будет встречным объектом {2: 2, 3: 1, 7: 1}

Таким образом, вам нужна функция «мин» на подсчетах общих факторы. Затем вам нужно умножить все в результирующем цикле.

Вы можете взять его оттуда? Посмотрите, с чем вы можете работать; пост снова с вашим прогрессом, если вы застряли.

+0

https://docs.python.org/dev/library/collections.html имеет доступные методы для Counter, а также другие классы с аналогичным возрастом и целью. – Prune

+0

Я все еще борюсь, поэтому мне нужно добавить «g = min (c и d)»? то как я умножаю вещи? это просто заканчивается тем, что дает мне самый низкий общий делитель так, как «2», и это все. – mcmoistener

+0

Запустите запущенный продукт, такой как gcd = 1 Вам нужно выполнить итерацию по элементам одного счетчика (скажем, 'c'). Для каждого элемента см., Существует ли ключ в 'd'. Если нет, перейдите к следующему элементу. Если это так, возьмите min из двух значений. Теперь, время цикла «мин». Каждый раз умножайте gcd на ключ элемента. Например, если вы нашли элементы 3: 4 в c и 3: 2 в d, вы будете перебирать 2 раза, умножая на 3. – Prune

Смежные вопросы