Возвращает, является ли число простым как логическое значение в Python - PullRequest
0 голосов
/ 12 апреля 2020

Для контекста я пытаюсь решить Проект Эйлера 3 , используя Python:

Каков наибольший простой множитель числа 600851475143?

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

def isprime(x):
    limit = x**0.5
    i = 2

    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        while i <= limit:
            if x%i == 0:          
                return False
                i = i + 1       
            else:
                return True

По какой-то причине приведенный выше код не работает идеально. Например, isprime(99) вернет True.

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

Мне кажется, проблема в заключительном утверждении else. Я говорю это потому, что логика c гласит «в случае, если x%i == 0, это число не простое», но в нем явно не говорится, что делать в случае, если нет x%i итераций == 0.

Любая помощь по этому вопросу будет принята с благодарностью! Я не обязательно ищу самый чистый и удобный способ сделать это, но больше просто пытаюсь сначала заставить этот код работать.

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

вам нужно сказать, что происходит, когда x%i==0 условие не выполнено и значение i остается постоянным, а также нужно видеть, когда все условия не выполнены, тогда это простое число

# your code goes here
def isprime(x):
    limit = x**0.5
    i = 2

    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        while i <= limit:
            if x%i == 0:         
                return False
            i+=1
    return True
print(isprime(144)) # false
print(isprime(99)) # false
print(isprime(131)) # true
1 голос
/ 12 апреля 2020

Просто, чтобы показать альтернативу, вы можете проверить с номера 2 на ваш номер, если операция (x % i) равна нулю. Если это никогда не произойдет, это будет простое число.

def isprime(x):
   # check for factors
   for i in range(2,x):
       if (x % i) == 0:
           return False
   else:
       return True

print(isprime(99))
1 голос
/ 12 апреля 2020

Попробуйте:

def isprime(x):
    limit = x**0.5
    i = 2
    if x <= 2:
        return False

    while i <= limit:
        if x%i == 0:          
            return False      
        i = i + 1
    return True 

Я многое изменил. имейте в виду, что нет необходимости в else предложениях, когда вы return в конце блока if.

...