2016-04-24 4 views
0

Я сделал запрос числа первичных чисел, в котором вы вводите число, и это говорит о погоде, это простое число.Python Prime number finder

while True: 
    p = int(input('Enter a number ')) 
    for d in range(2, p): 
     if p % d == 0: 
      print(p, "is not a prime number!", d,"*", p//d,"=",p) 
      break 
     else: 
      print(p, "is a prime number!") 
      break 

Однако он отображает цифры, которые явно не являются первыми. Я думаю, что это только разделение на 2, поскольку все нечетные числа, которые я пробовал, выводятся как нечетные.

Может ли кто-нибудь помочь исправить это?

+0

Подумайте об этом - когда вы уверены, что число является простым? Это после того, как вы проверили, делится ли он на два? – jonrsharpe

+0

Я думаю, что это только разделение на 2, поскольку все нечетные числа, которые я пробовал, выводятся как нечетные? – Avinash

+0

для производительности, вы можете взять 'for d in range (2, math.sqrt (p) +1):' –

ответ

1

Вы должны проверить все цифры, прежде чем сможете сказать, что это просто. В настоящее время ваша петля выходит при первой проверке (которая равна d == 2) и возвращает False, если p % 2 == 0, иначе True.

Вы должны поставить else заявление в конце цикла, как это:

while True: 
    p = int(input('Enter a number ')) 
    for d in range(2, p): 
     if p % d == 0: 
      print(p, "is not a prime number!", d,"*", p//d,"=",p) 
      break 
    else: 
     print(p, "is a prime number!") 

The else выполняется только если цикл не закончится break. Это означает, что если бы не был найден какой-либо разделитель, ваш номер был бы простым.

Кроме того, обратите внимание, что вам не нужно проверять номера до p, вы можете остановиться на sqrt(p) и повторить два на два: for d in range(3, int(p**0.5) + 1, 2).

+0

Спасибо, что сработало отлично, я не совсем уверен, почему я поставил перерыв на код в первую очередь. :) – User592

+1

Кроме того, вам не нужно проверять высоту, как 'p'. Просто сделайте 'для d в диапазоне (2, p ** 0,5 + 1):' – zondo

+0

@ User592, а также вы должны проверить 2, а затем только нечетные числа ... не нужно делить на '4,6,8, 10, ... 'для большей скорости/идей см. [Правые номера Eratosthenes быстрее последовательны, чем одновременно?] (Http://stackoverflow.com/a/22477240/2521214) – Spektre