Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2016 16:52:21

yyuuq
Зарегистрирован: 2016-01-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое число

Нужно написать программу, проверяющую является ли число простым. Вот код.
Почему is_prime(9) выдает True?

def is_prime(x):
    if x < 2:
        return (False)
    elif x == 2 or x == 3:
        return True
    else:
        for n in range(2,(x -1)):
            if x % n == 0:
                return False
            else:
                return True

Офлайн

#2 Янв. 19, 2016 17:00:04

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Простое число

Потому что остаток от 9/2 != 0

Офлайн

#3 Янв. 19, 2016 17:01:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простое число

        for n in range(2, (x - 1)):
            if x % n == 0:
                return False
            else:
                return True
x = 9
первая итерация n = 2
9 % 2 - отлично от нуля, выполняется else, там происходит возврат из функции. Всё, финита.



Офлайн

#4 Янв. 19, 2016 17:23:34

yyuuq
Зарегистрирован: 2016-01-19
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Простое число

FishHook
Всё, финита
Спасибо, я понял, но что поправить в коде, чтобы этого не было?

Офлайн

#5 Янв. 19, 2016 17:40:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простое число

Очевидно, что не нужно делать возврат из ветки else.



Офлайн

#6 Янв. 19, 2016 17:48:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Простое число

Офлайн

#7 Янв. 20, 2016 04:19:13

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Простое число

def is_prime(n):
    return ~ -2**n % n < 2
print(is_prime(int(input())))

Офлайн

#8 Янв. 20, 2016 07:07:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Простое число

Vigi
def is_prime(n):
    return ~ -2**n % n < 2

От 1 до 10000 проверил.
[1, 341, 561, 645, 1105, 1387, 1729, 1905, 2047, 2465, 2701, 2821, 3277, 4033, 4369, 4371, 4681, 5461, 6601, 7957, 8321, 8481, 8911]



Отредактировано py.user.next (Янв. 20, 2016 07:10:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version