2016-10-22 4 views
-1

Здесь я встречаю проблему, чтобы проверить факторы простого числапроверки простые множители числа

# using python2.7.10 
from math import sqrt 
def isprime(x): 
    if x == 1: 
     return False 
    k = int(sqrt(x)) 
    for j in range(2,k+1): 
     if x%j == 0: 
      return False 
     return True 
num = input("please input a number:") 
for i in range(2, num): 
    if i!= num and num % i == 0: 
     print i, 

Если я ввести номер 45, он печатает 3,5,9,15. Тем не менее, 3 является фактором 9 и 15, 5 - фактором 15. Надеюсь, что результаты будут 3, 5. Как я могу изменить свой код, чтобы достичь своей цели?

+0

Найти простые числа от '2' до' sqrt (x) ', используя Сито Эратосфена, затем перебирать только эти * простые числа *; как только вы найдете фактор, вы можете * разделить его на него. –

ответ

-1

Вот код для проверки простого или нет. Вы можете изменить, как вы хотите

prime_numbers = 0 

def is_prime_number(x): 
    if x >= 2: 
     for y in range(2,x): 
      if not (x % y): 
       return False 
    else: 
    return False 
    return True 


for i in range(int(raw_input("How many numbers you wish to check: "))): 
    if is_prime_number(i): 
     prime_numbers += 1 
     print i 

print "We found " + str(prime_numbers) + " prime numbers." 
+0

Я могу найти премьер в своем коде, но я надеюсь найти минимальный коэффициент этого числа и распечатать его. –

+0

Самый маленький или наименее? –

+0

У меня есть результаты, изменив условие. Большое спасибо:) –

0

Вам просто нужно переместить возвращающие из петли, так что вы проверить все номера для 2 - к:

from math import sqrt 

def isprime(x): 
    if x == 1: 
     return False 
    k = int(sqrt(x)) 
    for j in range(2,k+1): 
     if x % j == 0: 
      return False 
    return True # if you get here, you have checked all 2-k 

num = int(raw_input("please input a number:")) 
for i in range(2, num): 
    if isprime(i) and num % i == 0: 
     print(i,) 

Вы return True в любое время, что if x % j == 0 имеет остаток, поэтому вы не проверяете x на все числа. Кроме того, не используют ввод, чтобы принять пользовательский ввод, используйте raw_input литье в int i.e num = int(raw_input()).

Более эффективный способ сделать что вы хотите here

+0

извините за недостаток точности в моем вопросе. Надеюсь найти основные факторы числа. 3 и 5 являются первичными факторами 45, а 9 и 15 - нет. Теперь мой код может просто найти все факторы, но не простые. –

+0

Я нахожу способ достижения своей цели изменить цикл в последних двух строках. # if isprime (i) и num% i == 0: –

+0

@CharlieCai, я добавил ссылку на другой ответ, который будет более эффективным, чем ваш текущий подход. –

0

Попробуйте это, это поможет вам получить ваши анс:

def isprime(x): 
    if x >= 2:  
     for k in range(2,x): 
      if x%k==0: 
       return False 
     return True 
    else: 
     return False 


num = input("please input a number:") 
factor=[] 
prime_factor=[] 
for i in range(2, num): 
    if num % i == 0: 
     factor.append(i) 

for k in factor:  
    if isprime(k):   
     prime_factor.append(k) 

print 'Factors',factor 
print 'Prime Factors',prime_factor 

Output--

please input a number:45 
Factors [3, 5, 9, 15] 
Prime Factors [3, 5] 
+0

Отлично, я также вношу небольшие изменения в свой код, тогда он может работать. –

+0

@CharlieCai Отлично, я думаю, что мои ans также правильны, но люди меня голосуют, все равно хорошо сделано. –

-1

Просто чтобы немного поднять ответ vikram singh chandel, это более короткое решение, которое в конце концов избегает цикла double for. Нам нужно только добавить факторы, которые являются простыми числами:

EDIT: Незначительное изменение на покрытие для ввода простого номера напрямую.

def isprime(x): 

    if x < 2: 
     return False 

    for k in range(2, x): 
     if x % k == 0: 
      return False 

    return True 


num = input("please input a number:") 

factors = [] 
for i in range(1, num + 1): 
    if num % i == 0 and isprime(i): 
     factors.append(i) 

print 'Factors:', factors 
Смежные вопросы