2013-12-13 2 views
1

Я хочу умножить целое число со всеми числами в списке, который я генерирую, до достижения значения 65. Я начинаю с 2 (первый штрих) и умножаю до 63 (опять все простые числа), пока не достигню 65. Если значение не достигнуто с 2, я хочу, чтобы он попытался с 3 и так далее, пока правильное значение нам достиг. Я делаю это в python, и я тоже новичок, поэтому извиняюсь, если это базовое. Затем я хочу, чтобы распечатать номера, которые умноженные вместе, чтобы дать мне это значение, то есть я знаю, 5 и 13 дал бы мне 65. Вот некоторые из моего кода ниже:Умножьте все числа в сгенерированном списке на все большее число, чтобы достигнуть значения python

from __future__ import division 
import fractions 
ml = [] 
nl = [] 
p = 5 
q = 17 
d = 0 
x = 2 
y = 2 

z = (p-1)*(q-1) 
print z 
n = p*q 
print n 

for x in range(z): 
    if (fractions.gcd(x, z) == 1): 
     ml.append(x) 
    ##print ml 

s = 1 
for x in ml: 
    t = s * x 
    if t == 65: 
     print s 
     print x 
     break 
    else: 
     s = s + 1 
+2

Я думаю, что могу сказать, в чем ваша проблема, но вы получите более качественные ответы, если вы объясните, о чем вы не уверены. Как я должен угадать, что вам может понадобиться знать. –

+0

Мне нужно знать, как его вычислить для каждого целого в списке, но я хочу, чтобы он выводил только тогда, когда значение вычисления равно 65. Это то, что я пытался сделать с последней частью кода, но это похоже, не работает, или «ничего не делает». Спасибо, что ответили на вопрос. –

+0

Как общий совет, перечисление как ожидаемого результата, так и вашего фактического результата является хорошим ориентиром для задавания четкого вопроса. Это не имеет смысла для каждого вопроса, но в этом случае вопрос будет улучшен, сказав что-то вроде «Я ожидаю, что это напечатает 6 и 15. Однако мой цикл' for' выходит без вывода ». Не то, чтобы точная формулировка важна, но описывая причину, по которой вы считаете, что есть проблема. –

ответ

2

Вы приращение s и перемещение к следующему элементу в мл на каждом этапе цикла. Таким образом, вы пытаетесь только 1 * мл [0], 2 * мл [1] и т. Д. Я думаю, вы хотите два вложенных цикла, чтобы вы пробовали каждый элемент ml с любым возможным значением s. Вы можете получить это поведение немного чище с помощью itertools:

for s,x in itertools.product(range(65),ml): 
    t = s * x 
    if t == 65: 
     print s 
     print x 
     break 
+0

Спасибо, код ошибки, говорящий 'itertools' не определен, что такое код импорта? –

+1

Ты прав насчет причины проблемы. У меня может быть другая реализация правильного алгоритма, но я не вижу здесь ничего плохого, кроме того, что наличие 65 в качестве кепки диапазона - хотя и не так - кажется, больше зависит от настройки ввода, чем хотелось бы. Чтобы использовать 'itertools', добавьте' import itertools' в вашу программу. –

+0

Я согласен, что это относительно неэффективный алгоритм. Учитывая, что вы знаете, что ищете, кажется, что простой линейной альтернативой было бы просто вычислить s = 65/x на каждой итерации цикла. – happydave

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