Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 10, 2012 08:16:07

baa
От:
Зарегистрирован: 2011-11-25
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Определение простое число или нет

еще немножечко

def isPrm(x):
if x < 2 or (x > 2 and x % 2 == 0): # работает и без скобок, скобки для наглядности
return False
for i in xrange(3, int(x**0.5) + 1, 2):
if x % i == 0:
return False
return True



Отредактировано (Янв. 11, 2012 04:03:48)

Офлайн

#2 Янв. 10, 2012 15:30:07

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Определение простое число или нет

вместо

baa
x % 2 == 0
пишем
x&1==0



Офлайн

#3 Янв. 10, 2012 22:04:10

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Определение простое число или нет

Здравствуйте, подскажите пожалуйста, как проверить число целое или нет?
Я делал так -
if type(x)==int:

А если x = math.sqrt(4), то
type(x) - float
Зарание спасибо!



————————————————
-*- Simple is better than complex -*-

Офлайн

#4 Янв. 11, 2012 01:25:06

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

Определение простое число или нет

py.user.next
    if x > 3 and x % 2 == 0 or x <= 1:
return False
эта проверка на чётность имеет один недостаток
если число больше трёх и не делится на два, то оно сравнивается с единицей
а зачем его сравнивать с единицей, если оно уже больше трёх ?

можно сделать:
если число больше трёх и не делится на два, то выполнить цикл
иначе сравнить его с единицей

def isprime(x):
if x > 3:
if x % 2 == 0:
return False
for i in range(3, int(x ** 0.5) + 1, 2):
if x % i == 0:
return False
elif x <= 1:
return False
return True

print(isprime(121))
baa, у тебя тройка зачем-то на два делится
потом ещё для любого числа проверяется, не превышает ли оно двойку
если в функцию будут подавать много-много больших чисел, то все они будут сравниваться с двойкой, первым делом проверяясь на нахождение слева от неё на числовой оси
то есть ты предполагаешь, что функция будет иметь дело с числами меньшими двух чаще, чем она будет иметь дело с числами большими двух

Isem
пишем
x&1==0
а потом ещё равно убрать и сидеть загадки разгадывать потом через полгода
эта запись затемняет код, а ускорение ещё надо доказать



Офлайн

#5 Янв. 11, 2012 06:03:05

baa
От:
Зарегистрирован: 2011-11-25
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Определение простое число или нет

def isPrm(x):

if x % 2 and x > 2:

for i in xrange(3, int(x**0.5) + 1, 2):

if x % i == 0:

return False

elif x != 2:

return False

return True

print isPrm(21)



Отредактировано (Янв. 30, 2012 02:36:20)

Офлайн

#6 Янв. 11, 2012 09:02:28

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Определение простое число или нет

py.user.next
Isem написал:

пишем
x&1==0
а потом ещё равно убрать и сидеть загадки разгадывать потом через полгода
эта запись затемняет код, а ускорение ещё надо доказать
Да, сложно заниматься программированием не зная элементарную двоичную логику.



Офлайн

#7 Янв. 16, 2012 23:41:40

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

Определение простое число или нет

Isem
Да, сложно заниматься программированием не зная элементарную двоичную логику.
если код заставляет думать, то он плохо написан



Офлайн

#8 Янв. 17, 2012 16:08:09

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Определение простое число или нет

py.user.next
если код заставляет думать, то он плохо написан
или есть пробелы в образовании



Офлайн

#9 Янв. 18, 2012 14:14:21

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Определение простое число или нет

Диапазон можно уменьшить: вместо

xrange(3, int(x**0.5) + 1, 2)
достаточно
xrange(3, int(math.sqrt(x)), 2)



Офлайн

#10 Янв. 19, 2012 00:40:44

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

Определение простое число или нет

agalen, зачем операцию возведения в степень заменять на вызов функции ?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version