2016-03-07 2 views
0

Мне нужно найти все делители заданного целого числа, и из всех этих делителей я должен найти простые числа и поместить их в список от самого низкого до самого высокого.Поиск простых делителей из заданного целого числа

Это то, что я до сих пор:

def prime_divisors(n): 
    j = 2 
    list1 = [] 
    prime_list = [] 
    for i in range(2,n+1): 
      if n%i == 0: 
       if i==2 or i==3: 
        prime_list.append(i) 
       elif i%j == 0: 
        for j in range(2,n+1,2): 
         list1.append(j) 
      elif n%2 == 1 or n%3 == 1: 
       prime_list.append(n) 
       return prime_list 
    return prime_list 
prime_divisors(12)  
+1

Вам действительно нужно предоставить дополнительную информацию здесь. Что в настоящее время не работает для вас. Вы получаете какие-либо ошибки? Если да, дайте трассировку. – idjaw

+2

Вы используете переменную 'j', прежде чем объявлять ее – Selcuk

+0

Когда я запускаю ее через несколько тестовых примеров. У меня нет ошибок. Просто, что я не получаю все простые числа из заданного целого числа. Например, я считаю, что получаю простые числа для 12. Но для целых чисел, таких как 15 или 28, или один из тестовых примеров включает 1225, я не получаю все простые числа. На самом деле нужна помощь в этом. Извините, что я забыл включить j, но я его отредактировал. – brian012

ответ

0

Ваш тест, чтобы проверить, если делитель является простым неверен. Похоже, что ошибка находится в разделе elif i%j == 0:. Также, что происходит с list1?

Связанные вопросы, касающиеся первичных испытаний: answer1answer2. Тот, который я выбрал ниже, может быть не самым эффективным, но работает.

from math import sqrt; from itertools import count, islice  
def is_prime(n): 
    return n > 1 and all(n%i for i in islice(count(2), int(sqrt(n)-1))) 

def prime_divisors(n): 
    prime_list = [] 
    search_list = range(2, n/2 +1) # search only to n/2 
    search_list.append(n) # also check n 

    for i in search_list: 
     if n%i == 0: 
     # i has been found to evenly divide input number n 
     # now determine if it is prime 
      if is_prime(i): 
       prime_list.append(i) 
    return prime_list 
+0

есть способ, которым вы можете это сделать без использования встроенных функций, мне разрешено использовать if else, для циклов и добавления в список. Я понимаю ваш код, но я не могу использовать эти функции, что делает его немного сложнее кодировать. – brian012

+0

См. Ссылки на альтернативные подходы для первичного тестирования. – ljk07

0

Вы могли бы использовать это:

def prime_divisors(n): 
prime_list = [] 
if n%2==0: 
    prime_list.append(2) 
for i in range(3,n): 
    if n%i==0:   
     for j in range(2,i): 
      if i%j==0: 
       break 
      if j<i-1: 
       continue 
      prime_list.append(i) 
if len(prime_list)==0: 
    prime_list.append(n) 
return prime_list 

Допустимый диапазон значений только целые числа, большие, чем 1, и, довольно неэффективен.

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