2016-07-01 1 views
1

Недавно я создал функцию в python, которая даст мне все факторы любого числа, которое вы выберете в python. Я хотел бы изменить его сейчас, чтобы показать только основные факторы. Функция у меня в настоящее время:Итерация снова, цикл простых факторов, python

def prime_factors(n): 
L = [] 
i = range(1, n+1) 
for x in i: 
    if n % x == 0: 
     L.append(x) 
return L 

Теперь, чтобы найти простые множители, я хотел бы повторно итерацию через L, и удалите все числа из L, которые при делении на любые номера до себя, остальные было бы 0.

Так что, по сути, я просто хочу взять список, который у меня есть, после того, как я его добавил, затем разделите каждое значение в списке на каждое число до номера THAT, чтобы убедиться, т делится на что-либо с остатком 0.

Я попытался:

def prime_factors(n): 
    L = [] 
    i = range(1, n+1) 
    for x in i: 
     if n % x == 0: 
      L.append(x) 
    for y in L: 
     for x in i: 
      if y % x == 0: 
       L.remove(y) 
    return L 

Кроме того, я не пытался разделив его на 2 различные функции ...

def prime_factors(n): 
    L = [] 
    i = range(2, n) 
     for x in i: 
      if n % x == 0: 
       L.append(x) 
    return L 

def prime(n): 
    L = prime_factors(n) 
    i = range(2, n) 
     for y in L: 
      for x in i: 
       if x % y == 0: 
        L.remove(x) 
    return L 

Я попытался размещение возвращается в разных местах, я пытался листать порядок петель, независимо от того, Я не могу понять, как запустить список L через другую проверку, чтобы увидеть, если значения в нем делится на 0 ...

+0

Ваш исходный код для списка факторов может использовать более короткий цикл. Каждый раз, когда вы находите фактор 'x', вы также нашли второй фактор' n/x'. Вы можете добавить оба в список. Это уменьшает верхний предел вашей петли. Если вы хотите, чтобы факторы были в порядке, сортируйте список в конце. – rossum

ответ

1

Modif у вашей функции prime_factors следующим образом:

def prime_factors(n): 
    L = [] 
    i = range(2, n+1) # start from 2 as it is the first prime 
    for x in i: 
     if n % x == 0: 
      L.append(x) 
      # loop added 
      while n%x == 0: 
       n = n/x 
     # break as no further factors are possible 
     if n == 1: 
      break 
    return L 

Теперь, что в то время как п% х == 0 делает это, он снимает полномочия какого-либо фактора от исходного числа.

Например,
п = 24 = 2 * 2 * 2 * 3 п% 2 == 0, так что L = [2] и п становится 3 [Это гарантирует, 4 или 8, которые являются не- простые числа не добавляются к L]

0

Вы можете просто использовать функцию, вернуть True/False для простых чисел

import math 
def is_prime(n): 
    if n % 2 == 0 and n > 2: 
     return False 
    return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2)) 

def prime_factors(n): 
    L = [] 
    i = range(1, n+1) 
    for x in i: 
     if n % x == 0: 
      if is_prime(x): 
       L.append(x) 
    return L 
+0

Если бы я просто хотел изменить мой код выше, как бы я это сделал? Я действительно хотел бы сделать это, удалив ненужные числа из списка факторов. Плюс, я лучше понимаю, основываясь на коде, который у меня уже есть. – Destroxia

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

  • Нет связанных вопросов^_^